ホームページ  >  記事  >  ウェブフロントエンド  >  JSイベント処理関数間のEventオブジェクトは一致していますか?javascriptスキル

JSイベント処理関数間のEventオブジェクトは一致していますか?javascriptスキル

WBOY
WBOYオリジナル
2016-05-16 18:08:101090ブラウズ

以前にもこの小さな問題に遭遇しましたが、要約していませんでした
正確な結論を得るために、今再度遭遇しました:
例: Event オブジェクトは複数の実行関数の間にあります。

例:

コードをコピー コードは次のとおりです:

dom.addEvent('click', fna);
dom.addEvent('click',fnb);

1: Event オブジェクトに追加された属性fna は、次に実行される fnb 関数内の Event オブジェクトにアクセスできますか?
2: fna/fnb 関数実行時の Event オブジェクトは、Eventfna====Eventfnb と一致しますか? >標準文書が長すぎます
ここの説明はどこにありますか?怠け者ですね...
Jquery の場合、同じイベントに対して、複数の実行関数間の Event オブジェクトは一致します。 Jquery ライブ バインディング イベントの実装では、繰り返し実行される可能性のある関数 liveHandler について、Event オブジェクトに追加で与えられた liveFired 属性に依存して、初回実行後の liveHandler の開始時に関数が終了します。



コードをコピーします コードは次のとおりです。 if (event.liveFired === this | | ...) {
return;
}
///....


テスト:



コードをコピー
コードは次のとおりです。 function a(e) { e.abc = function () {
alert(a );
};
prevIeEvent=window.event;
関数 b(e,event); e.abc(); //fn
alert(e === prevEvent); //true
if(event=window.event){
alert(event===e); false
alert(event== =prevIeEvent);//false
alert(event===prevEvent);//false
}
}
var t = document.getElementById(" p");
if ( t.addEventListener) {
t.addEventListener('click', a, false);
t.addEventListener('click', b, false)
} else {
t.attachEvent(' onclick', b);
t.attachEvent('onclick', a)
}


ネイティブ バインディング イベント メソッドの場合 [addEventListener, AttachEvent]、複数の実行関数の場合 Event オブジェクト (パラメーターを介して渡されるイベント) は一致します。IE では、window.event を通じて取得される Event オブジェクトは一致しません。これは、パラメーターを介して渡されるイベントと同等ではありません。
バブリングイベントの場合:



コードをコピー


コードは次のとおりです:
dom。 addEvent( 'click',fna); domParentNode.addEvent('click',fnb); jquery では、トリガーの形式でイベントがトリガーされると、バブリングイベント イベントオブジェクトは一致しています。実際のユーザーのアクションによってトリガーされるイベントは、同じオブジェクトではありません。カスタム属性も渡すことはできません。どの値の設定も実際のoriginalEventには影響しません。
ネイティブ バインディング イベント メソッド [addEventListener,attachEvent] を使用します:



コードをコピー


コードは次のとおりです: function b(e,event) {
alert(e.abc); //fn
alert(e === prevEvent); =window .event){
alert(event===e); //false
alert(event===prevIeEvent);//false
alert(event===prevEvent);// false
}
}
var t = document.getElementById("p");
if (t.addEventListener) {
t.addEventListener('click', a, false);
document.body.addEventListener('click', b, false);
} else {
t.attachEvent('onclick', a); , b );
}


その結果、attachEvent がイベントにバインドされている場合、IE のバブリング イベント間の関数内の Event オブジェクトが矛盾します。 FFなどはaddEventListenerと合同なオブジェクトです。
実際、非 IE では、イベント オブジェクト Propagation 間の処理関数、または同じ DOM ノードによってトリガーされる複数の関数間の Event オブジェクト間の処理関数は一致します。バインディング フォーム [addEventListener/DOM0] とは何の関係もありません。
IE では、同じ DOM ノードによってトリガーされる複数の関数間のパラメーターを介して渡される Event オブジェクト (attachEvent) のみが一致します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。