JavaScriptとjQueryイベントには、イベントバブルとイベントキャプチャの問題があります。以下は、2つの問題とその解決策の詳細な要約です。
イベントバブルは、子供から祖先ノードまでのバブルのプロセスです。
イベントキャプチャは正反対であり、祖先ノードから子供ノードまでのプロセスです。
jQueryクリックイベントの例を挙げてください:
コードは次のとおりです。
コードコピーは次のとおりです。
<!doctype html>
<メタcharset = "utf-8">
<title>テスト</title>
<head>
<スクリプトsrc = "http://code.jquery.com/jquery-latest.js"> </script>
<script type = "text/javascript">
$(function(){
$( '#clickme')。クリック(function(){
アラート( 'hello');
});
$( 'body')。クリック(function(){
アラート( 'baby');
});
});
</script>
</head>
<body>
<div>
<button type = "button" id = "button2">私をクリックします</button>
<ボタンID = "clickme"> [/button]>をクリックします
</div>
</body>
</html>
イベントバブル現象:「id = clickme」のボタンをクリックし、2つのポップアップボックス「hello」と「baby」が次々に表示されます。
分析:「ID = clickMe」ボタンをクリックすると、ボタンとボタンの親要素とボディにバインドされたクリックイベントがトリガーされるため、2つのボックスが次々にポップアップし、いわゆるバブル現象が発生します。
イベントキャプチャ現象:クリックイベントにバインドしないDivとボタンをクリックすると、[ベイビー]ダイアログボックスがポップアップします。
実際のプロジェクトでは、イベントのバブルとイベントキャプチャを防ぎたいと考えています。
イベントが泡立つのを防ぐ方法:
方法1:現在のクリックイベントでfalseを返します。
コードコピーは次のとおりです。
$( '#clickme')。クリック(function(){
アラート( 'hello');
falseを返します。
});
方法2:
コードコピーは次のとおりです。
$( '#clickme')。クリック(function(event){
アラート( 'hello');
var e = window.event ||イベント;
if(e.StopPropagation){//イベントオブジェクトが提供されている場合、これは非IEブラウザーです
e.StopPropagation();
}それ以外{
//イベントバブルをキャンセルするための互換性のある方法
window.event.cancelbubble = true;
}
});
キャプチャイベントをブロックできないようです