2010-01-04 116 views
9

在我的网页上我有一个文件列表。当超链接点击时防止父容器点击事件发生

每一个文件是在它自己的div容器(DIV CLASS = “文件”)。容器内部是指向文件和描述的链接。

我想让用户点击容器上的任何位置来下载文件。我通过向容器添加一个单击事件并获取子链接的href来完成此操作。

由于文件在新窗口中打开,如果用户实际点击该链接,打开该文件的两倍。

所以我需要防止父容器click事件从被点击的超链接时开火。这样做的最好方法是将超链接的点击函数添加到0并设置event.stopPropagation?据推测,这会阻止事件冒泡到容器。

感谢 本

回答

8

是,使用stopPropagation。请参阅:Prevent execution of parent event handler

+8

是谁告诉你他的使用jQuery? – 2010-01-04 01:35:26

+1

不使用jQuery。 onClickHandler(event){event.stopPropagation(); } – 2017-01-11 23:57:52

15

在微软模式必须将事件的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(); 
} 
+4

这是有点令人困惑,因为你没有显示什么重视什么。 – daveagp 2011-07-26 14:57:54

2

感谢您的帮助。

我正在使用jQuery,但很好理解非框架解决方案。

添加的链接如下:

$(".flink").click(function(e) { 
     e.stopPropagation(); 
    }); 

+0

谢谢!我遇到了这个问题,这是非常烦人的调试,这解决了它。在我的情况下,我有一个点击处理程序的.pub,然后添加行$(“。pub a”)。click(function(e){e.stopPropagation();}); – daveagp 2011-07-26 14:58:42

+0

不从事件处理函数返回false是否具有相同的效果? – Johnus 2011-10-01 12:54:30

+0

@Johnus - 不,它不 - 看到http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ – 2011-10-13 09:50:49