win.gevent = {
handle : function(event){
var all, handlers;
//イベントをパッケージ化
event = argument[0] = gevent.fix(イベント || window.event );
event.currentTarget = this;
//ここで
var namespaces =event.type.split( "."); 🎜>event.type = namespaces.shift();
all = !namespaces.length;
var namespace = RegExp("(^|\.)" namespaces.slice().sort().join( ".*\.") "(\.|$)");
//この要素のこの動作のイベント リストを取得します
handlers = (data(this, "events" ) || {} )[event.type];
//このイベント リストを走査して、実行内容を実行します
for ( var j in handlers ) {
var handler = handlers[j];
if ( all | | namespace.test(handler.type) ) {
// ハンドラー関数自体への参照を渡します
// 後で削除できるように
// jq でコメントは次のように記述されます. イベント ハンドラーは便宜上このイベントを参照しており、後で削除できます。
// ただし、イベント ハンドラーは削除では使用されません。また、複数のイベントがある場合、これが使用されます。イベントは Replace
event.handler = handler;
//イベントを実行し、要素で呼び出されるイベントでこれを関数 < の戻り値として要素 ret を実行するために使用できます。 🎜>var ret = handler.apply(this, argument);
//戻り値があり、その戻り値が false の場合、イベントのバブリングが防止され、デフォルトの動作が防止されます。 🎜>if( ret !== 未定義 ){
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
}
}
},
props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget datadetail eventsPhase fromElement handler keyCode metaKey newValueoriginalTarget pageX pageY prevValue requiredNoderelationTargetscreenXscreenYshiftKeysrcElementtargettoElementviewwheelDeltathat".split(" "),
fix : function(event){
//new setEvent はイベントに Expando 属性を与えます。属性がある場合、イベントが生成されたことを意味します。イベントを再度ラップする必要はありません。
if (event[expando] )
//元のイベントを保持します。
// new新しいイベント これは元のイベントとは異なります
varoriginalEvent =event;
event = new setEvent (originalEvent)
//元のイベントの属性値を取得するには、this.props を参照してください。
for ( var i = this.props.length, prop; i; ){
prop = this.props[ --i ];
event[ prop ] = originalEvent[ prop ]; }
//ターゲット要素をevent.targetに統合します
if ( !event.target )
event.target = events.srcElement || // srcElementが定義されていない可能性がある#1925を修正します。
//テキストノードであることが判明した場合は、その親ノードを取得します
if (event.target.nodeType == 3)
event.target =event.target.parentNode; ( !event.popularTarget &&event.fromElement )
event.popularTarget =event.fromElement ==event.toElement : イベント
}
; >win.setEvent = function(src){
// 'new' キーワードなしでインスタンス化を許可します
// イベント オブジェクト
if( src && src.type ){
this.originalEvent = src ;
this.type = src.type;
// イベントタイプ
}else
this.type = src; // Firefox の一部のイベントでは timeStamp がバグります(#3843)
// したがって、ネイティブ値には依存しません
this.timeStamp = now();
// 固定としてマークします
this[expando] = true;
関数 returnFalse(){
return false;
}
function returnTrue(){
return true;
}
setEvent.prototype = {
preventDefault: function( ) {
var e = this.originalEvent;
if( !e )
return;
//PreventDefault が存在する場合は、元のイベントで実行します
if (e.preventDefault)
e.preventDefault();
// それ以外の場合は、元のイベントの returnValue プロパティを false に設定します (IE)
e. returnValue = false;
stopPropagation: function() 🎜>var e = this.originalEvent;
if( !e )
return;
// stopPropagation が存在する場合は、元のイベントで実行します
if (e.stopPropagation)
e。 stopPropagation();
// それ以外の場合は、元のイベントの cancelBubble プロパティを true に設定します (IE)
e.cancelBubble = true ;
},
stopImmediatePropagation:function(){
this .isImmediatePropagationStopped = returnTrue;
this.stopPropagation();
isImmediatePropagationStopped: returnFalse
}; >
コードをコピーします
コードは次のとおりです: