2

我在我的一个 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>
4

1 回答 1

4

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

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

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

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

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

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

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

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

您可能会在 DOM 事件规范中找到更多关于这方面的信息:

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

于 2012-12-02T10:35:13.437 回答