Html onmousedown vs href Precedence

时间:2012-12-02 10:22:34

标签: javascript html javascript-events href onmousedown

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

我已经测试了这个并且它可以工作(打开两个网址),但是有没有机会页面完成 window.location (重定向到其他页面)而不完成 href 命令?

两个命令之间是否存在优先规则?

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

<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>

1 个答案:

答案 0 :(得分:3)

mousedown事件将首先发生,但正如您从代码正在运行的事实中看到的那样,这不是整个故事。

问题是:一旦mousedown发生并且您设置了window.location,页面是否会立即被扫除(因此处理a元素上的点击的默认操作不会不会发生,或者在页面被销毁并用新页面替换之前是否完成了默认操作?

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

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

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

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

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

现在,您将专门为浏览器提供完成点击默认操作的机会,然后再转到其他页面。

您可能会在DOM事件规范中深入了解有关此内容的更多信息:

...因为他们可能会说一下事件正在进行并且页面被销毁时会发生什么。我没有立刻看到任何东西。