Html onmousedown vs href Precedence



我在我的一个html页面中使用以下代码。 当用户点击"搜索引擎"链接时,它会在新页面上打开 yahoo.com,在当前页面上打开Google。

我已经对此进行了测试并且它可以工作(打开两个网址),但是该页面是否有可能在不完成href命令的情况下完成window.location(重定向到其他页面)?

两个命令之间是否有优先级规则?

**注意:我知道我可以用不同的方式解决问题,但我对这种具体情况很好奇。

<html>
<head>
<title></title>
<script type="text/javascript">
function clickRedirect() {
window.location = 'http://www.google.com';
}
</script>
<body>
<a onmousedown="clickRedirect()" href="http://www.yahoo.com" target="_blank">Search Engines</a>
</body>
</html>

mousedown事件将首先发生,但正如您从代码当前工作的事实中看到的那样,这并不是故事的全部。

问题是:一旦鼠标按下发生并且您设置了window.location,页面是否会立即被带走(因此不会处理单击a元素的默认操作),还是该默认操作在页面被销毁并替换为新页面之前完成?

答案是:我认为这根本不是保证的行为(无论哪种方式),我也不会跨浏览器依赖它。首先,如果用户按住鼠标按钮怎么办?由于a元素的默认操作直到click才会触发,这需要mouseup

相反,我可能会以两种方式对冲我的赌注:

首先,我会使用click,而不是mousedown。用户不希望页面在按住鼠标时

交换。其次,我会改变你的功能:

function clickRedirect() {
setTimeout(function() {
window.location = "http://www.google.com";
}, 0);
}

现在,您专门让浏览器有机会在转到另一个页面之前完成默认的单击操作。

您可能会在 DOM 事件规范中找到有关此内容的更多信息:

  • DOM2 事件
  • DOM3 事件

。因为他们可能会说一些关于当事件正在进行并且页面被销毁时应该发生什么。我没有立即看到任何东西。

最新更新