1

次のサイトの画像の1つにカーソルを合わせると、アクションボタンが含まれているdivが表示されます。divをクリックするとポップアップが開き、子アクションボタンをクリックすると別のイベントが発生します。

その瞬間、divの子ボタンの1つをクリックすると、ポップアップが表示されます。以下のコードを使用して、イベントの伝播を停止しようとしました。

http://penguinenglishlibrary.tumblr.com/

$(document).on('click', '#DOMWindow .like', function(event) {
    event.preventDefault();
    event.stopPropagation();

});
4

4 に答える 4

4

イベントが委任されているため、伝播を停止できません。委任が本当に必要ですか、つまり、#DOMWindow .likeバインディングの時点で既に存在していますか? その場合は、次のようにすることができます。

$('#DOMWindow .like').on('click', function(event) {
    event.preventDefault();
    event.stopPropagation();
});

または、後でコメントで言ったように:

委任が本当に必要な場合は、ハンドラー ロジックを if でラップして、event.target が かどうかをチェックできます#DOMWindow .like。そうでない場合は、バブリングしていることを意味するため、何もしないでください。

于 2012-04-11T21:11:42.497 に答える
1

多分

jQuery('#DOMWindow .like').unbind('mouseenter mouseleave');

jQuery(.selector').hover() にイベントを添付すると仮定すると、うまくいくかもしれません

于 2012-04-11T21:12:40.667 に答える
0

イベントのバインド方法で伝播を停止することはできません。にバインドされていdocumentます。イベントがヒットdocumentすると、それは一番上にバブルされ、したがって、すでに伝播されているため、停止することはできません。

.likeたとえば、に近い親要素にイベントをバインドしてみてください#DOMWindow。注:イベントをバインドする要素は、これが呼び出されたときにDOMに存在する必要があります(そしてDOMにとどまります)。

$('#DOMWindow').on('click', '.like', function(event) {
    event.preventDefault();
    event.stopPropagation();
});

私が作成したこの例を確認してください:http://jsfiddle.net/QAZ3v/ それは私が何を意味するかをあなたに示すはずです。

于 2012-04-11T21:18:34.847 に答える
0

jQuery の on() 関数のドキュメントによると、

デフォルトでは、ほとんどのイベントが元のイベント ターゲットからドキュメント要素にバブル アップします。途中の各要素で、jQuery は、関連付けられている一致するイベント ハンドラーを呼び出します。ハンドラーは、event.stopPropagation() を呼び出すことで、イベントがドキュメント ツリーのさらに上にバブルするのを防ぐことができます (したがって、それらの要素のハンドラーが実行されないようにします)。ただし、現在の要素にアタッチされている他のハンドラーはすべて実行されます。これを防ぐには、event.stopImmediatePropagation() を呼び出します。(要素にバインドされたイベント ハンドラーは、バインドされたのと同じ順序で呼び出されます。)

したがって、

  event.stopImmediatePropagation();

あなたが探しているものです。false を返すことも同様に機能する可能性がありますが、よくわかりません。

ソース: http://api.jquery.com/on/

編集:フィドルで両方の提案をテストした後、どちらもクリックハンドラーでは機能しないようです。それらが on() で機能するかどうか知りたいです。

于 2012-04-11T21:47:28.623 に答える