次のようなコードがあるとします。
<html>
<head>
</head>
<body>
<div id="parentDiv" onclick="alert('parentDiv');">
<div id="childDiv" onclick="alert('childDiv');">
</div>
</div>
</body>
</html>
parentDiv
をクリックしたときにchildDiv
clickイベントをトリガーしたくないのですが、どうすればよいですか?
更新済み
また、これら2つのイベントの実行シーケンスは何ですか?
event.stopPropagation() を使用する必要があります
$('#childDiv').click(function(event){
event.stopPropagation();
alert(event.target.id);
});
説明:イベントがDOMツリーをバブリングするのを防ぎ、親ハンドラーにイベントが通知されないようにします。
JQueryなし:DEMO (
<div id="parentDiv" onclick="alert('parentDiv');">
<div id="childDiv" onclick="alert('childDiv');event.cancelBubble=true;">
AAA
</div>
</div>
私は同じ問題に直面し、この方法でそれを解決しました。 html:
<div id="parentDiv">
<div id="childDiv">
AAA
</div>
BBBB
</div>
JS:
$(document).ready(function(){
$("#parentDiv").click(function(e){
if(e.target.id=="childDiv"){
childEvent();
} else {
parentEvent();
}
});
});
function childEvent(){
alert("child event");
}
function parentEvent(){
alert("paren event");
}
stopPropagation()
メソッドは、親要素へのイベントのバブリングを停止し、親ハンドラーにイベントが通知されないようにします。
メソッドevent.isPropagationStopped()
を使用して、このメソッドが(そのイベントオブジェクトで)呼び出されたかどうかを知ることができます。
構文:
このメソッドを使用する簡単な構文は次のとおりです。
event.stopPropagation()
例:
$("div").click(function(event) {
alert("This is : " + $(this).prop('id'));
// Comment the following to see the difference
event.stopPropagation();
});