Javascript-バブルのソートとイベントのバブルの阻止
9532 ワード
イベントが発生すると、要素ノード間で特定の順序で伝播されます.この伝播プロセス、すなわちDOMイベントストリームです.
JSコードでは、キャプチャまたはバブルのうちの1つのフェーズonclickおよびattachEventのみが得られるバブルフェーズaddEventListener(type,listener[,useCapture])の3番目のパラメータがtrueであれば、イベントキャプチャフェーズでイベントハンドラを呼び出すことを示す.false(デフォルトではfalseと書かない)の場合、イベントバブルフェーズでイベントハンドラが呼び出されることを示します.
DOMイベントフローの3段階 JSコードでは、キャプチャまたはバブルの1つのフェーズ しか実行できません. onclickおよびattachEvent(ie)は、発泡段階 のみを得ることができる.取得フェーズaddEventListenerの3番目のパラメータがtrueの場合、document->html->body->father->son 取得フェーズバブルフェーズ:addEventListenerの3番目のパラメータがfalseまたは省略の場合、バブルフェーズ:son->father->body->html->document
onblur,onfocus,onmouseenter,onmouseleaveなどのイベントは泡が出ていません
イベントバブルを阻止する2つの方法:イベントバブル:最初は最も具体的な要素によって受け入れられ、DOM最上位ノードのイベントバブル自体に段階的に伝播する特性は、デメリットをもたらし、メリットをもたらします.
イベント委任(エージェント/委任):jQueryではイベント委任と呼ぶ.原理:親ノードにリスナーを追加し、イベントバブルを使用して各サブノードに影響を与えます.各サブノードに個別にイベントリスナーを設定するのではなく、イベントリスナーを親ノードに設定し、バブル原理の影響で各サブノードを設定します.
例:ulにクリックイベントを登録し、イベントオブジェクトのtargetを利用して現在クリックしているliを見つけます.liをクリックすると、イベントがulに浸かり、ulに登録イベントがあり、イベントリスナーがトリガーされます.
役割:DOMを1回操作するだけで、プログラムの性能が向上します.
JSコードでは、キャプチャまたはバブルのうちの1つのフェーズonclickおよびattachEventのみが得られるバブルフェーズaddEventListener(type,listener[,useCapture])の3番目のパラメータがtrueであれば、イベントキャプチャフェーズでイベントハンドラを呼び出すことを示す.false(デフォルトではfalseと書かない)の場合、イベントバブルフェーズでイベントハンドラが呼び出されることを示します.
DOMイベントフローの3段階
<script>
var son = document.querySelector('.son');
son.addEventListener('click',function(){
alert('son');
},true);
var father = document.querySelector('.father');
father.addEventListener('click',function(){
alert('father');
},true);
</script>
<script>
var son = document.querySelector('.son');
son.addEventListener('click',function(){
alert('son');
},false);
var father = document.querySelector('.father');
father.addEventListener('click',function(){
alert('father');
},false);
document.addEventListener('click',function(){
alert('document');
})
</script>
onblur,onfocus,onmouseenter,onmouseleaveなどのイベントは泡が出ていません
イベントバブルを阻止する2つの方法:イベントバブル:最初は最も具体的な要素によって受け入れられ、DOM最上位ノードのイベントバブル自体に段階的に伝播する特性は、デメリットをもたらし、メリットをもたらします.
<script>
if(e&&e.stopPropagation){
e.stopPropagation();
}else{
window.event.cancelBubble=true;
}
</script>
イベント委任(エージェント/委任):jQueryではイベント委任と呼ぶ.原理:親ノードにリスナーを追加し、イベントバブルを使用して各サブノードに影響を与えます.各サブノードに個別にイベントリスナーを設定するのではなく、イベントリスナーを親ノードに設定し、バブル原理の影響で各サブノードを設定します.
例:ulにクリックイベントを登録し、イベントオブジェクトのtargetを利用して現在クリックしているliを見つけます.liをクリックすると、イベントがulに浸かり、ulに登録イベントがあり、イベントリスナーがトリガーされます.
役割:DOMを1回操作するだけで、プログラムの性能が向上します.
<script>
var ul = document.querySelector('ul');
ul.addEventListener('click',function(e){
e.target.style.backgroundColor = 'pink';
})
</script>