href和tr点击避免重叠

3

我有一个表格行,使用JavaScript根据所选行单击打开某些菜单。我还有一个<a href>标签,用于打开链接或重定向到其他地方。

问题是,当我单击<a href>链接时,表格行也会被执行,从而打开菜单。

这是表格的脚本:

echo "<tr onclick=\"enableDialogs(1)\";>";

对于同一行中的<a>链接:

echo "<td><a href='?folder={$filedir}'>{$list}</a></td>";

问题是,我如何避免两个点击函数重叠?

嗯,问题在于即使a点击处理程序也在执行,tr点击处理程序也会执行。答案似乎是检测当前正在执行的元素,以确定是否应该处理tr处理程序。 - Jared Farrish
1
使用jQuery,只需在锚点的点击处理程序中添加event.stopPropogation()即可解决问题。 - user684934
3个回答

2
您遇到了经典的事件冒泡案例。正如一些评论所建议的那样,利用订阅元素的回调函数,引用第一个参数,并停止从 <a> 标签冒泡。假设 myElement 是您的 <a> 的 1 个 DOM 节点。
myElement.addEventListener("click", function(e) {
   e.stopPropagation();
}, false);

当然,jQuery回调函数的工作方式也是一样的。
$(myElement).click(function(e) {
    e.stopPropagation();
});

2
创建一个函数来检查菜单是否已经打开。如果它已经打开,它将继续重定向或执行您当前代码的任何操作。如果没有打开,它只是打开它。基本上,让函数处理整个过程。

1

您需要停止事件传播。

查看演示

Javascript 代码:

function stopPropagation(e) {
    if(!e) var e = window.event;

    if (e.stopPropagation) {
        e.stopPropagation();
    } else {
       e.cancelBubble = true;
       e.returnValue = false;
    }
}

PHP 代码:

echo "<td><a href='?folder={$filedir}' onclick=\"stopPropagation(event)\">{$list}</a></td>";


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接