在页面加载时阻止浏览器跳转到#name

时间:2009-04-21 18:36:16

标签: javascript jquery html

我在一个名为“login”的jQuery对话框中有一个表单。在JavaScript中,我检测URL中是否有“#login” - 如果是,则显示登录对话框。在FF / Safari / Chrome中,它可以正常工作,但在IE6 / 7中,当显示对话框时,浏览器页面会跳转到表单的顶部。我想防止这种情况发生。

我发现了我的问题here的答案,它给出了这个示例代码:

$('a.anchor').remove().prependTo('body');

我将“a.anchor”更改为“form.anchor”,但它无法正常工作。当我第一次加载mydomain / #login IE时,仍然会跳到表单的顶部。然后,如果我刷新页面,它会再次显示对话框,但不会跳转。

知道如何全局阻止IE跳转到任何表单/锚名称吗?

3 个答案:

答案 0 :(得分:4)

我建议使用查询参数或类似内容,例如page.html?showlogin = true。 URL上的page.html#xxxxx旨在将浏览器滚动到页面上的该ID。

中途的

http://www.w3schools.com/html/html_links.asp解释了name属性。

否则你会做一些凌乱的黑客攻击浏览器做他们应该做的事情。

答案 1 :(得分:3)

........不要把你不希望在代码中使用的命名锚点?

答案 2 :(得分:0)

有正当理由以这种方式使用哈希标记。在Ajaxian应用程序中,它可以帮助管理浏览器历史记录。

所有浏览器(包括IE)都应该忽略location.hash,除非有一个命名锚 - 除了IE喜欢跳转到具有该ID或NAME的任何元素。所以,如果你有

<form name="login" ...

<form id="login" ...

甚至

<div id="login"><form name="somethingElse"...

可能会导致IE像传统的哈希标记一样对待它并跳下来。

相关问题