divを動的に追加したコンテナ<div>
があります。 div35には、のようにbody
要素を使ってclick
ハンドルが与えられます(このようにして、動的に追加された要素のバインディングをコード内のすべての場所で実行できるようにし、多数のバインディングを防ぐことができます)。 stopPropagation()
をコンテナdivに配置して、親のクリックハンドルがトリガされないようにする必要があります。問題は、コンテナdivのstopPropagation
を入れると、子divがトリガーされなくなります(実際にはバインディングを持つボディであり、子divではないので)。
ここに私のことを示すフィドルです問題:
$("#A").click(function() {
console.log('This event should not fire when clicking innermost')
});
$("#B").click(function(e) {
e.stopPropagation();
});
$("body").on("click", "#C", function() {
console.log('This event should fire when clicking innermost')
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="A">
outermost
<div id="B">
middle
<div id="C">
innermost
</div>
</div>
</div>
[異様に類似した質問](http://stackoverflow.com/questions/41598293/event-propagation-issue/41598470) – lonesomeday
@lonesomedayのすごい迫力.....私は誓います私は自分のスニペットを見ていないが、それは私のスニペットに奇妙に似ている。しかし、バインディングは私の質問の親divで少し異なります。 –
#Cのイベントハンドラは、BとAが発生した後に発生します。イベント委任を使用しない、または伝播を停止しないことは、何もできません。 –