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

Javascript 防止在单击超链接时触发父容器单击事件,javascript,dom-events,Javascript,Dom Events,在我的网页上,我有一个文件列表 每个文件都位于自己的容器div(div class=“file”)中。容器内有指向文件的链接和说明 我希望允许用户单击容器上的任意位置下载文件。为此,我向容器中添加了一个click事件并检索子链接的href 当文件在新窗口中打开时,如果用户实际单击链接,文件将打开两次 因此,我需要防止父容器单击事件在单击超链接时触发。最好的方法是在超链接中添加一个click函数到0,并设置event.stopPropagation?这可能会阻止事件冒泡到容器中。是的,使用Stop

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

每个文件都位于自己的容器div(div class=“file”)中。容器内有指向文件的链接和说明

我希望允许用户单击容器上的任意位置下载文件。为此,我向容器中添加了一个click事件并检索子链接的href

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


因此,我需要防止父容器单击事件在单击超链接时触发。最好的方法是在超链接中添加一个click函数到0,并设置
event.stopPropagation
?这可能会阻止事件冒泡到容器中。

是的,使用StopperPagation。请参阅:

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

window.event.cancelBubble = true;
在W3C模型中,必须调用事件的stopPropagation()方法

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

function doSomething(e) {
    if (!e) e = window.event;
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
}
谢谢你的帮助

我使用的是jQuery,但知道一个非框架解决方案还是不错的

为链接添加了以下内容:

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

这是一个有点混乱,因为你没有显示什么附加到什么。谢谢!我正好遇到了这个问题,调试起来很烦人,这就解决了它。在我的例子中,我有一个.pub的click处理程序,然后添加了行$(“.pub a”).click(函数(e){e.stopPropagation();});从事件处理程序函数返回false不会有同样的效果吗?@Johnus-不,它不会-see在没有jQuery的情况下工作。onClickHandler(事件){event.stopPropagation();}
$(".flink").click(function(e) {
    e.stopPropagation();
});