3

特定のクラスを持つ子のセットでクリック イベントをリッスンする委任の親があります。

$(".toggle_group").on("click",".toggle",function(e){ .. });

これがhtmlの例です

<div class='toggle_group'>
  <a class='toggle'>click me and i toggle <div>Im a child of toggle</div></a>
  <a class='toggle'>click me and i toggle <div>Im a child of toggle</div></a>
  <a class='toggle'>click me and i toggle <div>Im a child of toggle</div></a>
  <a class='toggle'>click me and i toggle <div>Im a child of toggle</div></a>
</div>

問題は、子がa.toggleイベントを親に伝達し、ハンドラーをトリガーしてはならないときに発生することです。jQuery docs によると、ライブ/委任されたイベントリスナーでイベントの伝播を停止することはできません。

これらの a.toggle のサブ子がイベントを親に伝播するのを止めるにはどうすればよいですか? または、場合によっては許可しますか?

の内側の div が.toggleドロップダウン メニューであることがわかります。メニューをクリックしたときにトグルするべきではなく、トグルリンクをクリックしたときにのみ...

4

2 に答える 2

5

このページのコメントを確認してください。少なくとも一部の人は回避策を見つけたと主張しています。http://api.jquery.com/event.stopPropagation/

今後の参考のために、ここのスレッドからコメントをコピーしました。

MikeW:.live()イベントの伝播の問題を回避します。動的に作成されたノードは、親がイベントを受信するまでイベントを受信しません。これによりファンキーネスとstopPropagationが発生し、preventDefaultはこの問題を解決しません。修正するには:行を追加します

if(event.target!= this){return true; }

親ノードのイベントハンドラーの先頭に移動します。これにより、イベントが実際に子ノードにアドレス指定されたときに親イベントが発生するのを停止し、(falseを返すのとは異なり)目的のノードにイベントを伝播します。

于 2012-02-05T22:10:31.973 に答える