2013-05-07 10 views
0

jQuery Mobile和加載其他腳本正在殺死我。我查閱了他們的文檔,並且我明白他們的AJAX模型會帶來一些複雜性,我從這裏獲得了一些幫助來應用這些信息,但是我仍然無法讓所有的工作始終如一地工作。這裏有一個例子:jQuery Mobile:有些腳本正在運行,有些則不是。不知道爲什麼

我有一個頁面有2個表單域,一個是日期和一個是時間。我正在調用日期字段上的jQuery UI Datepicker和時間字段上的第三方Timepicker(this timepicker)。如果我直接訪問頁面或進行刷新,兩者都運行得很好。但是,如果我從別處導航到頁面,則只會運行日期選擇器。它們都在我的文檔頭中鏈接,並且都在pageinit的頁面上調用。爲什麼一個人工作,而不是另一個工作?

頭:

<!DOCTYPE html> 
<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en" > <![endif]--> 
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> 
    <head> 
    <meta charset="utf-8"> 

    <title>Test Site</title> 

    <!-- Make it Mobile friendly --> 
    <meta name="HandheldFriendly" content="True"> 
    <meta name="MobileOptimized" content="320"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <meta http-equiv="cleartype" content="on"> 

    <!-- Stylesheets --> 
    <link rel="stylesheet" href="_css/normalize.css" /> 
    <link href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" rel="stylesheet"> 
    <link rel="stylesheet" href="_css/jquery.mobile.structure-1.3.1.css" /> 
    <link rel="stylesheet" href="_css/red_variant/red_variant.css" /> 
    <link href="_libraries/jquery-ui-timepicker-0.3.2/jquery.ui.timepicker.css" rel="stylesheet" type="text/css" /> 
    <link rel="stylesheet" href="_css/foundation.css" /> 
    <link rel="stylesheet" href="_css/main.css" /> 

    <!-- jQuery Including UI and Mobile --> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js" type="text/javascript"></script> 
    <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js" type="text/javascript"></script> 
    <script src="_libraries/jquery-ui-timepicker-0.3.2/jquery.ui.timepicker.js" type="text/javascript"></script> 

</head> 

表格題:

<form> 
    <label for="addAgendaDate" class="ui-hidden-accessible">Date:</label> 
<input name="addAgendaDate" id="addAgendaDate" placeholder="Date" value="" type="text"> 
    <label for="addAgendaTime" class="ui-hidden-accessible">Time:</label> 
<input name="addAgendaTime" id="addAgendaTime" placeholder="Time" value="" type="text"> 
</form> 

<script> 
     $(document).on('pageinit', function(){  
      $("#addAgendaTime").timepicker({ 
       showPeriod: true, 
       showLeadingZero: true 
      }); 
     }); 

     $(document).on('pageinit', function(){  
      $("#addAgendaDate").datepicker(); 
     }); 
</script> 

我缺少什麼導致兩者對正常的頁面負載工作,但只有一對jQuery Mobile的AJAX加載工作?


解決!花了一個月的時間,但我終於圍繞這個包裹了我的頭。 Gajotres和凱文B兩組中讓我瞭解底層腳本使用問題的工具,但我的每一個腳本的問題結束了具有不同額外問題:

  • 下面竟是由於日期和時間選擇器不一致 z-index引發的CSS問題。時間選擇器彈出並正常工作 腳本方式,但由於某種原因,jQueryUI將其z-索引 內聯設置爲零,這將其置於移動頁面覆蓋之後。 CSS 覆蓋(不得不做一個!重要的)修復。
  • 與 有問題因爲我有一個PHP 包括將同一個頁腳拖入每個頁面,所以jQuery Countdown是一個ID重複問題。更改爲 解決。
+0

因爲ID必須是唯一的,並且在JQM中,當下一頁導航到頁面時,頁面不會從DOM中刪除,導致兩頁上的任何ID都發生衝突。 – 2013-05-07 18:05:08

+0

@Kevin B這些ID在整個網站上都是唯一的。 – Chaz 2013-05-07 18:27:32

回答

4

jQuery Mobile的如何處理頁面改變

要理解這種情況下,你需要了解jQuery Mobile的是如何工作的。它使用ajax來加載其他頁面。

第一頁正常加載。它的HEADBODY被加載到DOM,他們在那裏等待其他內容。當第二頁被加載時,只有BODY內容被加載到DOM

這就是爲什麼你的按鈕顯示成功,但點擊事件不起作用。在頁面轉換期間忽略父HEAD的相同單擊事件。

如果您想了解更多閱讀我的另一篇文章:Why I have to put all the script to index.html in jquery mobile

這裏有一個官方文檔:http://jquerymobile.com/demos/1.2.0/docs/pages/page-links.html

可惜你不會找到自己的文檔描述,在此。以太他們認爲這是一種常識,或者他們忘記像我的其他話題一樣描述這一點。 (jQuery Mobile文檔很大,但缺少很多東西)。

解決方案1 ​​

在你的第二頁,和所有其他網頁,將您的SCRIPT標籤爲主體內容,是這樣的:

<body> 
    <script> 
     // Your javascript will go here 
    </script> 
    // And rest of your HTML content 
</body> 

這是一個快速解決方案,但仍然難看。

解決方案2

將您的所有javascript移動到原始的第一個HTML中。收集所有內容並將其放入一個js文件中,放入HEAD中。在jQuery Mobile加載後初始化它。

<head> 
    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no; target-densityDpi=device-dpi"/> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" /> 
    <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>  
    <script src="index.js"></script> // Put your code into a new file 
</head> 

最後,我將說明爲什麼這是一個很好的解決方案的一部分。

解決方案3

使用相對=「外部」在您的按鈕,你正在使用,以改變頁面元素的每。因爲它需要用來加載頁面,你的jQuery Mobile應用程序的行爲就像一個普通的Web應用程序。不幸的是,這不是一個好的解決方案。 Phonegap不應該像普通的網絡應用程序一樣工作。

<a href="#second" class="ui-btn-right" rel="external">Next</a> 

正式文件,尋找一個章節:Linking without Ajax

現實的解決方案

現實的解決方案將使用解決方案2。但與解決方案2不同,我會使用相同的index.js文件並在每個其他頁面的HEAD中對其進行初始化。

現在你可以問我爲什麼

Phonegap就像jQuery Mobile一樣有問題,遲早會出現錯誤,如果你的每個js內容都在一個HTML文件中,你的應用程序將會失敗(包括加載的DOM)。 DOM可能會被刪除,Phonegap會刷新您當前的頁面。如果該頁面沒有JavaScript,那麼它將在重新啓動之前無法使用。

+0

謝謝,抱歉,延遲響應。我仍然無法讓腳本保持一貫的行爲。我已經嘗試了所有3個選項 - 我已經將腳本加載到原始問題的正文中。移動到頭部鏈接的文件仍然沒有解決,並禁用AJAX不是炒作。我不明白我做錯了什麼。 – Chaz 2013-05-17 15:47:18

+0

如果這不是問題,請將您的項目郵寄給我,我會爲您解決它。通常情況下這很簡單,你需要第二雙眼睛才能找到問題。我的郵箱:[email protected] – Gajotres 2013-05-17 15:53:08

+0

我很感激這個提議,不幸的是這是一個工作項目,我無法發送。我在其中一個有問題的腳本(在這種情況下是ckeditor)上做了一些改進,只是把它移到了幾個特定的​​頁面上 - 但在其他腳本上仍然不一致。我只是在jQuery Countdown腳本中特別發佈了另一個相關問題:http://stackoverflow.com/questions/16614659/script-failing-to-modify-footer-on-jquery-mobile-page-on-ajax-page-load – Chaz 2013-05-17 17:20:05

相關問題