我目前正在使用 jQuery 来制作可点击的 div,并且在这个 div 中我也有锚点。我遇到的问题是,当我点击一个锚点时,两个点击事件都在触发(对于 div 和锚点)。单击锚点时,如何防止 div 的 onclick 事件触发?
这是损坏的代码:
JavaScript
var url = $("#clickable a").attr("href");
$("#clickable").click(function() {
window.location = url;
return true;
})
HTML
<div id="clickable">
<!-- Other content. -->
<a href="http://foo.example">I don't want #clickable to handle this click event.</a>
</div>
原文由 Jonathon Watney 发布,翻译遵循 CC BY-SA 4.0 许可协议
事件冒泡到 DOM 中附加点击事件的最高点。因此,在您的示例中,即使您在 div 中没有任何其他显式可单击元素,div 的每个子元素也会将其单击事件在 DOM 中冒泡,直到 DIV 的单击事件处理程序捕获它。
有两种解决方案是检查谁实际发起了该事件。 jQuery 将 eventargs 对象与事件一起传递:
您还可以将点击事件处理程序附加到您的链接,告诉他们在自己的处理程序执行后 停止事件冒泡: