2013-08-01 254 views
1

我正在開發使用JQM的Web應用程序。在一頁上我有這個腳本:JQM pageinit事件未觸發

$('#testpage').on('pageinit', function() { 
    alert('testpage pageinit event fired'); 
}); 

其中的頁面id = testpage。

根據JQM文檔,當頁面首次被訪問時加載頁面時,此事件應該會觸發,但這不會發生在我身上。

當我直接進入頁面時,我看到了警報,但如果我先訪問其他頁面然後轉到頁面,則看不到警報導致我相信該事件根本不會觸發。

我也試過以下語法:

$(document).on('pageinit', '#testpage', function() { 
    alert('testpage pageinit event fired'); 
}); 

和同樣的事情發生了。

這是能夠在JQM中做的最基本的事情之一,它失敗了。請告訴我爲什麼這不是它記錄的方式。

+0

你在哪裏放置腳本?在#testpage裏面?或在一個單獨的js文件? –

+0

我把它放在testpage裏面。 –

回答

0

我發現這個問題,就是前面的頁面上的腳本代碼打破了我試圖捕獲pageinit事件的頁面上的腳本代碼。當我刪除那個壞腳本時,這開始工作。所以這不再是一個問題。

0

爲什麼綁定pageinit頁沒有工作

出現這種情況的原因是因爲當時要綁定的pageinittestPage,其尚未在DOM。所以它不工作。 您必須在<head/>中擁有這一位代碼,該代碼將在您的<body/>部分加載之前加載,其中您的testPage位於此處。這就是爲什麼它失敗。那麼你如何使它工作?補充一點:

$('#testpage').on('pageinit', function() { 
    alert('testpage pageinit event fired'); 
}); 

到HTML的<body>部分的。因此,所有內容都將被加載,然後您的頁面將被綁定到它的pageinit事件。這裏是你的代碼將如何看起來像:

<body> 
    <div data-role="page" id="testPage"></div> 
    <script> 
    $("#testPage").on("pageinit", function() { 
     alert("pageinit fires- this is in body."); 
    }); 
    </script> 
</body> 

這裏有一個演示:http://jsbin.com/umorof/1/edit

爲什麼綁定pageinit到文檔工作

之所以在這種情況下,結合您的pageinit作品是因爲document將出席您的頁面被調用的實例。因此,pageinit通過事件代表團管理到testPage。當第一次加載testPage時,document會觸發testPagepageinit事件。

希望這可以解決問題。

+0

不,腳本在身體中,但我相信我找到了問題(或至少是什麼使其工作)。我正在開發ASP。淨MVC 4和在默認的佈局文件,它把渲染的jQuery和jQuery的手機腳本在身體的盡頭。這意味着單個頁面中的任何腳本都會在jquery和jquery mobile加載之前呈現。我通過查看渲染頁面的來源發現了這一點。我將jquery和jquery mobile的加載移動到head部分的末尾,然後在測試頁面上觸發pageinit事件,因爲它應該有。 –

+0

@ObiWan對你有好處:) – krishgopinath

+0

當pageinit在測試屏幕上觸發時,它不會在另一個屏幕上觸發,我不知道爲什麼。 –