Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TR作为链路,其TD作为其他链路_Javascript - Fatal编程技术网

Javascript TR作为链路,其TD作为其他链路

Javascript TR作为链路,其TD作为其他链路,javascript,Javascript,出于一些非常奇怪的原因,tr的window.location.href战胜了td的window.location.href。如果我将它们替换为警报,它们将按正确的顺序显示:td然后tr,单击右侧的td 您需要防止click事件冒泡到。使用以下命令: onclick="changeLocation(event, 'user?user=Bobo', true);" 你也可以为活动做同样的事情 并声明函数: function changeLocation(e, newURL, noBubble) {

出于一些非常奇怪的原因,tr的window.location.href战胜了td的window.location.href。如果我将它们替换为警报,它们将按正确的顺序显示:td然后tr,单击右侧的td

您需要防止click事件冒泡到。使用以下命令:

onclick="changeLocation(event, 'user?user=Bobo', true);"
你也可以为活动做同样的事情

并声明函数:

function changeLocation(e, newURL, noBubble) {
    if (noBubble) {
        e.stopPropagation();
    }
    console.log("Would be navigating to: " + newURL);
    //window.location.href = newURL;
}
在实际代码中,您显然会删除console.log行,并取消注释更改URL的实际部分

演示:


这允许它,所以如果你点击那个特定的,它会赢。如果您单击其中的任何其他位置,它将获胜,因为没有其他与它冲突的事件。

问题是单击会在dom树中冒泡。因此,第一次调用td的onclick,然后click事件传播到tr并执行该事件

要停止传播,请使用:

<td onclick="window.location.href='user?user=Bobo'; event.stopPropagation();">
背景中发生了什么: 文件结构:

文件 祖父母 父母亲 要素 父母2 ... 事件:用户单击元素

结果:

将执行元素的所有单击侦听器* 事件开始冒泡 将执行父级的所有单击侦听器* 将执行父级的所有单击侦听器* 将执行文档的所有单击侦听器* *侦听器获取事件对象,并可以通过调用以下命令取消冒泡:

event.stopPropagation:不让事件传播到父级,而是执行当前级别上的所有侦听器。 event.stopImmediatePropagation:不允许事件传播到父级,也不会在同一级别上调用其他侦听器 可以检查单击事件对象以了解信息的每个图层:

当前正在处理的事件event.currentTarget 最初单击的元素event.target
希望这会有所帮助,因为Javascript读取最后一个给予location对象的href属性。
它必须首先执行td onclick,然后执行tr onclick。由于页面尚未加载,它指向您设置的最后一个href属性。

td onclick首先被触发,但tr onclick会覆盖window.location.href

移动到另一个页面不会阻止调用其他javascript

window.location.href='http://www.google.com';
window.location.href='http://www.bing.com';

正如你的提醒所显示的那样,tr不会最终获胜吗?这真的很有趣。谢谢
window.location.href='http://www.google.com';
window.location.href='http://www.bing.com';