2009-04-21 131 views
1

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

我发现了什么样子回答我的问题here,这给这个例子代码:

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

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

任何想法如何在全球范围内阻止IE跳转到任何形式/锚名称?

+1

是否有一个特殊的原因,您为什么使用散列符号来实现功能*而不是跳转到文档位置?我的意思是......这就是它的目的,所以当它按设计工作时不要抱怨。 :) – Tomalak 2009-04-21 18:50:22

回答

3

........不要把你不想在你的代码中使用的指定锚?

+0

表单必须有一个名称才能正确提交。 – CMB 2009-04-21 18:49:56

4

我建议使用查询参数或其他内容,比如page.html?showlogin = true。网址上的page.html#xxxxx用于将浏览器滚动到页面上的该ID。

http://www.w3schools.com/html/html_links.asp半路向下解释名称属性。

否则,你会做一些凌乱的黑客来绕过浏览器做他们应该做的事情。

0

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

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

<form name="login" ... 

<form id="login" ... 

甚至

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

可能导致IE浏览器把它当作传统的井号和跳了下去。