\r
\r
// TODO ブラウザからの呼び出しの最後に登録された関数を呼び出す機能(例えば画面の更新)\r
-var X_EventDispatcher_CURRENT_EVENTS = [];\r
+var X_EventDispatcher_CURRENT_EVENTS = [];\r
+var X_EventDispatcher_ignoreActualEvent;\r
+var X_EventDispatcher_rawEvent;\r
\r
// handleEvent を拡張可能にするために、クロージャに移動した\r
// Is this in regard to the Safari 1.x preventDefault bug on click/dblclick?\r
var X_EventDispatcher_actualHandleEvent =\r
X_UA_EVENT.IE4 || X_UA_EVENT.IE ? // ie45678 EVENT_IE & EVENT_DOM0 for ie4\r
(function(){\r
- var e = event, ret,\r
- ev = new X_DomEvent( e, this, this[ '_rawObject' ] );\r
+ var e = event,\r
+ elm = this[ '_rawObject' ],\r
+ ev, ret;\r
\r
+ if( X_EventDispatcher_ignoreActualEvent ){\r
+ e.cancelBubble = true;\r
+ return;\r
+ };\r
+ \r
+ X_EventDispatcher_rawEvent = e;\r
+ \r
+ ev = new X_DomEvent( e, this, elm );\r
+\r
X_EventDispatcher_CURRENT_EVENTS[ X_EventDispatcher_CURRENT_EVENTS.length ] = ev;\r
\r
ret = this[ 'dispatch' ]( ev );\r
\r
+ if( X_EventDispatcher_rawEvent === e ) X_EventDispatcher_rawEvent = null;\r
+\r
--X_EventDispatcher_CURRENT_EVENTS.length;\r
\r
if( ret & X_CALLBACK_STOP_PROPAGATION ){\r
e.cancelBubble = true;\r
};\r
+ \r
+ if( !X_EventDispatcher_CURRENT_EVENTS.length ) ExecuteAtEnd_onEnd();\r
+ \r
if( ret & X_CALLBACK_PREVENT_DEFAULT ){\r
- this[ '_tag' ] === 'A' && this[ '_rawObject' ].blur();\r
+ X_EventDispatcher_ignoreActualEvent = true;\r
+ this[ '_tag' ] === 'A' && elm.blur(); // おかしくない??\r
+ X_EventDispatcher_ignoreActualEvent = false;\r
return e.returnValue = false;\r
};\r
}) :\r
//X_UA_EVENT.W3C || X_UA_EVENT.DOM0\r
(function( e ){\r
- var ev = new X_DomEvent( e, this ),\r
- ret = X_CALLBACK_NONE,\r
- i, l;\r
+ var ret = X_CALLBACK_NONE,\r
+ elm = this[ '_rawObject' ],\r
+ ev, i, l;\r
\r
+ if( X_EventDispatcher_ignoreActualEvent ){\r
+ e.stopPropagation();\r
+ return;\r
+ };\r
+\r
+ X_EventDispatcher_rawEvent = e;\r
+ \r
+ ev = new X_DomEvent( e, this );\r
X_EventDispatcher_CURRENT_EVENTS[ X_EventDispatcher_CURRENT_EVENTS.length ] = ev;\r
\r
// touch event -> pointer\r
ret = this[ 'dispatch' ]( ev );\r
};\r
\r
+ if( X_EventDispatcher_rawEvent === e ) X_EventDispatcher_rawEvent = null;\r
+ \r
--X_EventDispatcher_CURRENT_EVENTS.length;\r
\r
+ if( !X_EventDispatcher_CURRENT_EVENTS.length ) ExecuteAtEnd_onEnd();\r
+ \r
if( ret & X_CALLBACK_STOP_PROPAGATION ){\r
e.stopPropagation();\r
};\r
if( ret & X_CALLBACK_PREVENT_DEFAULT ){\r
- this[ '_tag' ] === 'A' && this[ '_rawObject' ].blur();\r
+ X_EventDispatcher_ignoreActualEvent = true;\r
+ this[ '_tag' ] === 'A' && elm.blur();\r
+ X_EventDispatcher_ignoreActualEvent = false;\r
+ \r
e.preventDefault();\r
if( X_UA[ 'WebKit' ] < 525.13 ){ // Safari3-\r
if( e.type === 'click' || e.type === 'dbclick' ){\r