2010-10-09 67 views
0

Let'u与下面的例子入手:了解HTML锚标记

创建同一目录三个页面: 的test.html 的index.html

你的test.html:

<html> 
<head> 
    <script> 
    function test() 
    { 
    alert('Going to google.com?'); 
    window.location="http://google.com"; 
    } 
    </script> 
</head> 
<body> 
    <a href='' onclick="test();">google.com</a><br/> 
    <input type="button" value="google" onclick="test();" /> 
    <a href='' onmouseover="test();">google.com</a><br/> 
</body> 
</html> 

现在检查IE上的test.html页面以及firefox或者crome。

你会发现以下几点:

  1. 按钮完美的作品。
  2. 第一个超链接在IE和其他浏览器中的工作方式不同。在IE中,它将我们带回到index.html页面,而在Firefox中,它保持在同一页面上。
  3. 对于第一个超链接,window.location失败。
  4. 第二个超链接,你不能点击它,因为鼠标悬停事件将首先触发,它完美的工作!

为什么?

我的主要兴趣是第三点,因为它甚至给我们提醒,window.location失败。

回答

1

试试这个:

<html> 
<head> 
    <script> 
    function test() 
    { 
    alert('Going to google.com?'); 
    window.location="http://google.com"; 
    return false; 
    } 
    </script> 
</head> 
<body> 
    <a href='' onclick="Javascript:return test();">google.com</a><br/> 
    <input type="button" value="google" onclick="Javascript:return test();" /> 
    <a href='' onmouseover="Javascript:return test();">google.com</a><br/> 
</body> 
</html> 
+0

为什么在返回语句前有标签? https://developer.mozilla.org/en/JavaScript/Reference/Statements/label – Quentin 2010-10-09 09:37:44

+0

如果我把'alert()'放在'window.location'后面,那么'alert()'会先被调用,然后它会重定向我们到我们的位置为什么? – Vikas 2010-10-09 09:47:22

+0

实际上,我不是那种在js中经历过的,可以告诉你为什么警报会在重定向之前出现。对我来说,似乎重定向是触发窗口对象的位置属性的变化,并且事件放在堆栈上,并在您的test()方法中正在处理的单击事件之后进行处理 – ITroubs 2010-10-09 09:52:17

3

的JavaScript事件火灾,window.location设置,然后链接火灾的默认操作和浏览器去',这(IIRC)解析为当前URI。

如果您点击一个链接,然后快速点击不同的链接,就会得到同样的效果。在收到第二个指令前,浏览器没有时间去第一个,然后到第二个。如果您延迟该函数的返回(通过将警报放在第二位),它会提供足够的时间让请求访问第一个URL,而不是第二个URL。

当您使用固有事件属性(不建议,unobtrusive JavaScript是前进的方向)时,您需要取消默认动作,通过返回false完成。

onclick="test(); return false;"