我目前正在使用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.com">I don't want #clickable to handle this click event.</a>
</div>

推荐答案

事件冒泡到DOM中已附加单击事件的最高点.因此,在您的示例中,即使div中没有任何其他可显式单击的元素,div的每个子元素都会将其单击事件冒泡到DOM中,直到div的单击事件处理程序捕捉到它.

有两种解决方案可以解决这一问题,即判断事件的实际发起人.jQuery将一个eventargs对象与事件一起传递:

$("#clickable").click(function(e) {
    var senderElement = e.target;
    // Check if sender is the <div> element e.g.
    // if($(e.target).is("div")) {
    window.location = url;
    return true;
});

您还可以将单击事件处理程序附加到您的链接,这些链接会在它们自己的处理程序执行后告诉它们stop event bubbling:

$("#clickable a").click(function(e) {
   // Do something
   e.stopPropagation();
});

Javascript相关问答推荐

使脚本兼容于其他YouTube URL格式

JavaScript代理不适用于打开的窗口对象

验证嵌套 colored颜色 代码的结果

将下拉分区与工具提示结合起来

如何让\w token 在此RegEx中表现得不贪婪?

获取表格的左滚动位置

如何通过在提交时工作的函数显示dom元素?

成帧器运动中的运动组件为何以收件箱开始?

使用TMS Web Core中的HTML模板中的参数调用过程

Redux工具包查询(RTKQ)端点无效并重新验证多次触发

django无法解析余数:[0] from carray[0]'

通过嵌套模型对象进行Mongoose搜索

成功完成Reducers后不更新状态

简单的PayPal按钮集成导致404错误

Angular 中的类型错误上不存在获取属性

禁用.js文件扩展名并从目录导入隐式根index.js时,找不到NodeJS导入模块

DOM不自动更新,尽管运行倒计时TS,JS

图表4-堆叠线和条形图之间的填充区域

如何使用画布在另一个内部绘制一个较小但相同的形状,同时保持恒定的边界厚度?

MongoDB中的嵌套搜索