2012-09-20 85 views
0

我正在開發一個jQuery Mobile和PhoneGap應用程序。我正在使用此代碼:Pageinit多次觸發

$('#contact').live('pageinit', function() { 
    //$.mobile.loading('show'); 
    theme(); 
    getData('contact/list',contactList); 
    //$.mobile.loading('hide'); 
}); 

當第一次訪問頁面時,它工作良好。在第二次嘗試中,事件多次發射。我嘗試使用bind,但它不起作用。

我認爲它與live事件有關。每次我初始化頁面時都會綁定它,這使得它成爲多個頁面。鏈接時會解決問題:window.location.href - 它重新創建DOM。不幸的是我無法使用它。

有沒有辦法以其他方式處理pageinit

我試圖找到它,但沒有成功。也看了:click() firing multiple times

+0

您能指出您的代碼的哪一部分執行此事件綁定嗎? – Romain

+0

我在頁面div中綁定。 –

回答

0

從理論上講,任何可以被'活'綁定的事件都可以直接綁定。直接綁定的好處是它會(iirc)覆蓋先前綁定的處理程序。因此,您只有一個處理程序,因此在後續加載時不會觸發多次。

嘗試類似:

$("#contact").pageInit(function() { 
    theme(); 
    getData('contact/list', contactList); 
}); 
0

我通常使用on()方法,而不是live()(現在已棄用)。我給我的每一個頁面容器的id的,所以索引頁面上,可能就index,那麼我就可以綁定到事件,如:

$(document).on("pageinit", "#index", function() { 
    //do stuff here 
}); 

Works的頁面顯示也同樣如此。

0

當綁定在jQuery Mobile的事件,你必須非常謹慎,以確保它們不會被綁定多次。瀏覽到jquery mobile中的新頁面不會像更傳統的導航那樣「重置」綁定事件。 您面臨的問題很可能是因爲每次訪問頁面時都會綁定到該事件,這意味着您訪問該頁面的次數越多,執行該操作時執行的次數就越多。 爲了確保事件只綁定一次,我會建議綁定在您的初始頁面的標題。這樣,事件就會一勞永逸地綁定,並且只要啓動此頁面,就會運行該函數。

0

你可以嘗試添加data-ajax =「false」給你正在提交的任何表單,這些表單可能會創建多個版本的頁面(多次觸發事件)。