单击超链接时防止触发父容器单击事件

IT技术 javascript dom-events
2021-03-15 21:04:32

在我的网页上,我有一个文件列表。

每个文件都在它自己的容器 div 中(div class="file")。容器内是文件的链接和说明。

我想让用户点击容器上的任何地方来下载文件。我通过向容器添加点击事件并检索子链接的 href 来做到这一点。

当文件在新窗口中打开时,如果用户实际单击链接,文件将打开两次。

所以我需要防止父容器点击事件在点击超链接时触发。这样做的最佳方法是将点击功能添加到超链接 to0 并设置event.stopPropagation据推测,这将阻止事件冒泡到容器。

3个回答

在 Microsoft 模型中,您必须将事件的 cancelBubble 属性设置为 true。

window.event.cancelBubble = true;

在 W3C 模型中,您必须调用事件的 stopPropagation() 方法。

event.stopPropagation();

如果您不使用框架,这是一个跨浏览器的解决方案:

function doSomething(e) {
    if (!e) e = window.event;
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
}
这有点令人困惑,因为您没有显示什么与什么相关。
2021-05-12 21:04:32

是的,使用 stopPropagation。请参阅:防止执行父事件处理程序

无需 jQuery 即可工作。onClickHandler(event) { event.stopPropagation(); }
2021-05-11 21:04:32

谢谢您的帮助。

我正在使用 jQuery,但很高兴知道非框架解决方案。

为链接添加了以下内容:

$(".flink").click(function(e) {
    e.stopPropagation();
});
从事件处理函数返回 false 不会有同样的效果吗?
2021-04-24 21:04:32
2021-04-26 21:04:32
谢谢!我遇到了这个问题,调试起来很烦人,这解决了它。在我的例子中,我有一个 .pub 的点击处理程序,然后添加了行 $(".pub a").click(function(e) {e.stopPropagation();});
2021-05-14 21:04:32