X-Git-Url: http://git.osdn.jp/view?p=pettanr%2FclientJs.git;a=blobdiff_plain;f=0.6.x%2Fjs%2F01_core%2F15_XEventDispatcher.js;fp=0.6.x%2Fjs%2F01_core%2F15_XEventDispatcher.js;h=20701c3ff7e00ab52305f40870284bd2b444144a;hp=afa52c7cb7a20da13d453ea515b852539961fde1;hb=604668ba9efa027d4bc77fd8020d6b6be55d03e1;hpb=ef25747bebf1799d49f9bd0d64e339da9ea61d13 diff --git a/0.6.x/js/01_core/15_XEventDispatcher.js b/0.6.x/js/01_core/15_XEventDispatcher.js index afa52c7..20701c3 100644 --- a/0.6.x/js/01_core/15_XEventDispatcher.js +++ b/0.6.x/js/01_core/15_XEventDispatcher.js @@ -734,7 +734,8 @@ function X_EventDispatcher_actualRemoveEvent( that, type, raw, list, skip ){ // TODO ブラウザからの呼び出しの最後に登録された関数を呼び出す機能(例えば画面の更新) var X_EventDispatcher_CURRENT_EVENTS = []; -var X_EventDispatcher_ignoreActualEvent = ''; +var X_EventDispatcher_ignoreActualEvent; +var X_EventDispatcher_rawEvent; // handleEvent を拡張可能にするために、クロージャに移動した // Is this in regard to the Safari 1.x preventDefault bug on click/dblclick? @@ -746,36 +747,48 @@ var X_EventDispatcher_actualHandleEvent = elm = this[ '_rawObject' ], ev, ret; - /* if( e.type === X_EventDispatcher_ignoreActualEvent ){ + if( X_EventDispatcher_ignoreActualEvent ){ e.cancelBubble = true; return; - }; */ + }; - ev = new X_DomEvent( e, this, elm ); + X_EventDispatcher_rawEvent = e; + ev = new X_DomEvent( e, this, elm ); + X_EventDispatcher_CURRENT_EVENTS[ X_EventDispatcher_CURRENT_EVENTS.length ] = ev; ret = this[ 'dispatch' ]( ev ); + if( X_EventDispatcher_rawEvent === e ) X_EventDispatcher_rawEvent = null; + --X_EventDispatcher_CURRENT_EVENTS.length; if( ret & X_CALLBACK_STOP_PROPAGATION ){ e.cancelBubble = true; }; + + if( !X_EventDispatcher_CURRENT_EVENTS.length ) ExecuteAtEnd_onEnd(); + if( ret & X_CALLBACK_PREVENT_DEFAULT ){ - this[ '_tag' ] === 'A' && elm.blur(); + X_EventDispatcher_ignoreActualEvent = true; + this[ '_tag' ] === 'A' && elm.blur(); // おかしくない?? + X_EventDispatcher_ignoreActualEvent = false; return e.returnValue = false; }; }) : //X_UA_EVENT.W3C || X_UA_EVENT.DOM0 (function( e ){ var ret = X_CALLBACK_NONE, + elm = this[ '_rawObject' ], ev, i, l; - /* if( e.type === X_EventDispatcher_ignoreActualEvent ){ + if( X_EventDispatcher_ignoreActualEvent ){ e.stopPropagation(); return; - }; */ + }; + + X_EventDispatcher_rawEvent = e; ev = new X_DomEvent( e, this ); X_EventDispatcher_CURRENT_EVENTS[ X_EventDispatcher_CURRENT_EVENTS.length ] = ev; @@ -795,13 +808,20 @@ var X_EventDispatcher_actualHandleEvent = ret = this[ 'dispatch' ]( ev ); }; + if( X_EventDispatcher_rawEvent === e ) X_EventDispatcher_rawEvent = null; + --X_EventDispatcher_CURRENT_EVENTS.length; + if( !X_EventDispatcher_CURRENT_EVENTS.length ) ExecuteAtEnd_onEnd(); + if( ret & X_CALLBACK_STOP_PROPAGATION ){ e.stopPropagation(); }; if( ret & X_CALLBACK_PREVENT_DEFAULT ){ - this[ '_tag' ] === 'A' && this[ '_rawObject' ].blur(); + X_EventDispatcher_ignoreActualEvent = true; + this[ '_tag' ] === 'A' && elm.blur(); + X_EventDispatcher_ignoreActualEvent = false; + e.preventDefault(); if( X_UA[ 'WebKit' ] < 525.13 ){ // Safari3- if( e.type === 'click' || e.type === 'dbclick' ){