我在我的一个html页面中使用以下代码。 当用户点击“搜索引擎”链接时,它会在新页面上打开yahoo.com,在当前页面上打开Google。
我已经测试了这个并且它可以工作(打开两个网址),但是有没有机会页面完成 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>
答案 0 :(得分:3)
mousedown
事件将首先发生,但正如您从代码正在运行的事实中看到的那样,这不是整个故事。
问题是:一旦mousedown发生并且您设置了window.location
,页面是否会立即被扫除(因此处理a
元素上的点击的默认操作不会不会发生,或者在页面被销毁并用新页面替换之前是否完成了默认操作?
答案是:我认为这根本不保证行为(无论哪种方式),我不会依赖它跨浏览器。首先,如果用户按住鼠标按钮怎么办?由于a
元素的默认操作在click
之前未触发,因此需要mouseup
。
首先,我会使用click
,而不是mousedown
。当用户只是按住鼠标时,用户不希望页面换出。
其次,我会改变你的功能:
function clickRedirect() {
setTimeout(function() {
window.location = "http://www.google.com";
}, 0);
}
现在,您将专门为浏览器提供完成点击默认操作的机会,然后再转到其他页面。
您可能会在DOM事件规范中深入了解有关此内容的更多信息:
...因为他们可能会说一下事件正在进行并且页面被销毁时会发生什么。我没有立刻看到任何东西。