2011-09-30 60 views
4

下面是這種情況:jQuery Mobile的加載頁面到DOM,即使我不要求它

(僅供參考,在下面,當我說「了window.location = ......」就被觸發通過按鈕點擊)

我有三個頁面:1.html,2.html,3.html。我瀏覽方式如下:

1.HTML --- window.location="2.html" ---> 2.HTML

2.HTML --- <a href="3.html" /> ---> 3.html

 click Back button 

2。 html --- window.location="1.html" - > 1.html

在最後一步1.html加載但是然後2.html的內容加載到DOM內部替換1.html的內容,所以我在1.html但是見2.html的內容。

發生了什麼事?爲什麼jQuery mobile認爲它必須加載2.html的內容?

我很確定它與歷史記錄和後退按鈕有關。如果我只是在不使用「後退」按鈕的情況下在1.html和2.html之間導航,它就可以工作。

更新這裏是代碼http://jsfiddle.net/x6bxN/要重現您想要從HTML框中獲取代碼並將其分爲三個單獨的文件。

+0

也許我不明白你在做什麼。因爲我無法複製它。我試圖重現你所描述的內容,但它對我來說工作正常。這是我的示例代碼。注:這是3個獨立的HTML文件,我只是將它們全部粘貼到相同的pastebin頁面中。 http://pastebin.com/JkneaERE –

+0

你可以發佈多一點的代碼?也許http://jsfiddle.net因爲我想看看你是如何 –

+0

@PhillPafford這裏的網頁間導航是的jsfiddle http://jsfiddle.net/x6bxN/我把HTML從所有三個文件,並插入一個鏈接他們進入HTML框。你想把它們放在三個單獨的文件中進行重現。 –

回答

0

如果你想jQuery Mobile的處理則需要使用$ .mobile.changePage改變頁面(而不是了window.location = ..)的歷史和返回按鈕。

此處瞭解詳情:http://jquerymobile.com/demos/1.0rc1/docs/api/methods.html

+0

我知道關於切換頁面的jQuery手機功能。我不想使用它們,因爲它打破了其他功能。因此我使用window.location。我的困惑,爲什麼jQuery手機試圖'劫持'我的網頁。這顯然與歷史和後退按鈕有關。 –

0

您是否嘗試過明確設置數據的Ajax =「假」您的鏈接?或rel =「external」,儘管這應該只在您想要更改爲其他域時使用。

如果你沒有設置任何一個,我很害怕JQM劫持。

試試看它是否適用於data-ajax =「false」。

其實我對常規的JQM-Ajax鏈接也有類似的問題。我想通過頁面Ajax加載,但如果我這樣做:

  • 去第1頁
  • 去page2a
  • 去page2b =重載第1頁...

很煩人我已經在Github上提交了一個問題,但由於您不想使用Ajax,因此您應該可以。

讓我知道它是否有效。

3

看起來正在發生的事情是您在jQM範圍之外進行導航,但是1.html位於location.hash中。獨立地發生的點擊的

哈希的變化,如當 點擊返回按鈕的用戶,通過hashchange事件, 這勢必會使用本Alman的hashchange 特殊事件插件(窗口對象處理包含在jQuery Mobile中)。當散列改變 時(以及當第一頁面加載),該hashchange事件 處理程序將在的location.hash發送到$ .mobile.changePage()函數 ,這反過來又或者負載或揭示了引用的頁面。

我假設location.hash在加載時有最初的1.html,但在使用window.location導航到新頁面時沒有跟蹤新頁面。由於您正在使用瀏覽器後退按鈕,因此jQM使用最後一個跟蹤的位置,在您的情況下爲1.html。

我會建議使用JQM的$.mobile.changePage(),如果你需要跟蹤的位置。 更多關於JQM導航可以在文檔中找到:

+0

由於網址在任何鏈接中都沒有#符號,因此location.hash始終爲空。 –

+0

只要您離開1.html,jQM就會將此位置添加到urlHistory中。我懷疑,因爲您沒有使用jQM來跟蹤哈希導航點擊後退按鈕會在urlHistory中找到1.html。你過渡到頁面之前,你也許可以把你的自定義導航到的location.hash,這可能幫助這個問題 –

+0

我真的要使用$ .mobile.changePage()方法來嘗試,但我需要掛鉤事件正確。我知道我應該使用pageinit而不是ready事件,但是,我有點困惑,因爲在如何掛鉤這個事件。我對這裏http://stackoverflow.com/questions/7729729/jquery-mobile-binding-to-pageinit-event –

0

胡亂猜測。您沒有將css class ui-page-active硬編碼到.ui-page元素中?因爲會導致這兩個頁面出現。

+0

nope。但很好的猜測。 –

相關問題