イベントは JavaScript の中心的なコンテンツの 1 つです。イベントの適用にはイベント バブリングという重要な概念が必然的に含まれます。イベント バブリングを紹介する前に、もう 1 つの重要な概念であるイベント フローを紹介します。
1. イベントフローとは:
ドキュメント オブジェクト モデル (DOM) はツリー構造であり、次の図で明確に表すことができます。
HTML 要素がイベントをトリガーすると、イベントは DOM ツリー内のトリガー ノードとルート ノードの間で特定の順序で伝播され、通過するすべてのノードがトリガーされたイベントを受け取ります。一連の出来事。イベントは伝播の順序に従って 2 つのカテゴリに分類でき、1 つはイベント バブリング、もう 1 つはイベント キャプチャであり、この章で紹介するトピックが関係します。
1. イベントバブリング:
いわゆるタイム バブリングとは、要素がイベントをトリガーすると、イベントがバブルのようになり、トリガー要素からすべての親ノードに伝播し、対応するルート ノードまでイベントが受信されることを意味します。親要素のハンドラー関数にイベントが登録されている場合、子ノードでイベントがトリガーされた場合でも、親要素に登録されているイベント ハンドラー関数もトリガーされます。たとえば、上の図では、a 要素の onclick イベントがトリガーされると、その親要素である p、document、および window がすべてこのイベントを受け取り、時間処理関数が対応する親要素に登録されている場合、このイベント処理関数が実行されます。コード例を見てください:
<html> <head> <meta charset="utf-8"/> <title>事件冒泡简单介绍</title> <script type="text/javascript"> window.onload=function(){ var table=document.getElementById("mytable"); table.onclick=function(e){ var event=e||window.event; target=event.srcElement||event.target; alert(target.innerHTML); } } </script> </head> <body> <table width="400" border="1" id="mytable"> <tr> <td>脚本之家</td> <td>脚本之家</td> <td>脚本之家</td> </tr> <tr> <td>脚本之家</td> <td>脚本之家</td> <td>脚本之家</td> </tr> <tr> <td>脚本之家</td> <td>脚本之家</td> <td>脚本之家</td> </tr> </table> </body> </html>
イベント キャプチャは、イベント バブリングの逆です。要素がクリックされたとき、IE では、通常、デフォルトで、ルート要素からトリガー要素への伝播がサポートされません。バブルイベント処理モデル。
2.javascriptはイベントのバブリングコードを防止します
イベントのバブリングは特定のシナリオでは非常に便利ですが、場合によっては防止する必要がある場合があります。イベントのバブリングを防止するために、すべての主要なブラウザーと互換性のあるコード例を示します。
コード例:
function stopBubble(e) { if(e&&e.stopPropagation) { e.stopPropagation(); } else { window.event.cancelBubble=true; } }
2. コードのコメント: