おはようございます、
リストとして表示されるページに一連のボックスがあり、これらのボックス内にクリックできるリンクがいくつかある場合があります。ボックス内のリンクが通常どおり機能するようにしたい (つまり、バブルアップしてデフォルト アクションを実行するか、DOM のさらに上のイベント ハンドラーによって処理される) が、ボックスが他の場所でクリックされた場合は、特定のすべてのボックスを含む「リスト」にアタッチされたイベント ハンドラ。
単純な html 表現
<div class="boxlist">
<div class="box" data-boxid="1">
Some text, and possibly a <a href="#">link</a> and another <a href="#">link</a>, and perhaps even a third <a href="#">link</a>.
</div>
<div class="box" data-boxid="2">
Some more text, this time without a link.
</div>
</div>
動作するはずだと思ったJavaScript。
$(function () {
$('.boxlist').on('click', '.box :not(a)', function (e) {
var boxid= $(this).closest('.box').data('boxid');
console.log('open: ' + boxid);
});
});
私の予想では、上記の JavaScript は、タグから発生したものではないすべてのクリックを処理する必要があります。ただし、何らかの理由でボックスがクリックされると (ボックス自体またはタグは関係ありません)、このイベントが X 回発生します。ここで、X はボックスのリスト内のタグの総数です。
2 つの質問があります: 1. :not() セレクターのどこが間違っているのでしょうか。2. このシナリオを処理するためのより良い方法はありますか?
助けてくれてありがとう!