2009-04-21 137 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瀏覽器把它當作傳統的井號和跳了下去。