早上好,
我在页面上有一组显示为列表的框,在这些框中可能有一些可以单击的链接。我希望框内的链接正常工作(即冒泡并执行默认操作或然后由事件处理程序进一步处理 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.有没有更好的方法来处理这种情况?
谢谢你的帮忙!