早上好,
我在页面上有一组盒子,这些盒子呈列表形式呈现,在这些盒子中可能有一些可以单击的链接。 我希望盒子内的链接像正常工作一样(即向上冒泡并执行默认操作,或由 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是方框列表中所有标签的总数。
所以我有两个问题: 1. 我在使用:not()选择器时做错了什么? 2. 有没有更好的方法来处理这种情况?
谢谢您的帮助!
box
还是a
本身,并执行相应动作。这样你就不需要使用:not
选择器了。 - SachinGutte