2012-03-26 58 views
2

我使用jQuery mobile 1.0.1來做到精確。我有2頁。jQuery Mobile在外部鏈接上的後退按鈕造成奇怪的問題

Index --> Sub Page(external) 

我的超級鏈接看起來是這樣的:

<a href="sub_page.html" rel="external" data-transition="slide"> 

而且我已經加入移動<script>標籤的jQuery和jQuery之間的這種代碼:

$(document).bind("mobileinit", function(){ 
    $.mobile.ajaxLinksEnabled = false; 
}); 

我的兩個索引和子頁面的完整頁面與他們自己的標題,內容,頁腳,css聲明和腳本,這就是爲什麼我使用外部rel。

奇怪的行爲:

  1. 列表項
  2. 我的超級鏈接點擊從索引頁
  3. 它會打開一個新頁面,一切都OK了
  4. 我單擊後退。好的。
  5. 我再次點擊相同的超鏈接
  6. 子頁面再次打開,但經過非常小的延遲(甚至沒有一秒鐘)後,「加載」出現,索引頁面出現在子頁面內。

如何在同一個域上的外部鏈接上實現簡單的後退按鈕?

編輯 我已經解決了這個問題,這樣的:

$(document).bind("mobileinit", function(){ 
    $.mobile.pushStateEnabled = false; 
}); 
之間的jQuery和jQuery Mobile包括

。作爲JQM文檔狀態:與其「我們建議禁用$ .mobile.pushStateEnabled全局配置選項來避免在某些瀏覽器不一致導航行爲。」

+0

在兩個頁面上都設置了ajaxlinksenabled嗎? – codaniel 2012-03-27 02:07:39

回答

0

比禁用AJAX導航你可以使用它通過將所有的自定義腳本爲data-role="page"元素中的每個頁面而不是文檔的<head>。這樣,當頁面被引入時,代碼塊將被拉入DOM。

更好的解決方案將是把自定義JS爲整個網站的所有成一個單一的.js包括,包括它在你的網站每一頁。通過這種方式,您的網站的所有代碼都將始終可用,無論用戶登陸何處,或者他們如何與網站進行交互(例如,刷新頁面)。

這裏是我的建議:

<!DOCTYPE html> 
<head> 
    ... 
</head> 
<body> 
    <div data-role="page"> 
     ... 
    </div> 
    <script src="/js/custom-mobile.js"></script> 
</body> 
</html> 

這通常需要通過事件委託綁定,所以你可以編寫代碼時某個頁面添加到DOM將觸發。這很重要,因爲您不能確定何時頁面將在DOM中。出於同樣的原因,在爲元素使用ID時需要小心,因爲多個頁面可以/將一次位於DOM中,所以所有ID都必須是唯一的站點範圍。

+0

我相信這樣一個簡單的事情應該沒有任何額外的JS來完成。這是基本的功能。我只能同意將所有頁面放在data-role =「page」divs中,我會這樣做。感謝您幫助決定 – 2012-03-27 07:16:13