2012-03-09 97 views
4

我試圖在頁面完全加載並且JQM已經照顧所有UI修改(即列表視圖,按鈕等)後,只執行一次JS代碼片段。我希望它只在該頁面上執行,而不是在後續頁面上執行。只有一次jQuery Mobile - 觸發頁面顯示事件

我第一次嘗試,是pageshow

<script> 
$('[data-role=page]').live("pageshow", function() { 
    alert("Ready!"); 
}); 
</script> 

這具有該功能現在附加到頁面的div和被執行的任何後續頁面的時候顯示每次的問題。不過,我只希望這個被執行一次,並且只針對包含該JS片段的頁面。

有沒有一種方法來監聽頁面顯示事件,而無需實際附加功能。

我能夠做到這一點的唯一途徑是通過結合和解除綁定是這樣的:

<script> 
$('[data-role=page]').bind("pageshow.test", testfun); 

function testfun() { 
    alert("Ready!"); 
    $('[data-role=page]').unbind("pageshow.test", testfun); 
} 
</script> 

但有一個更優雅的方式來做到這一點?

+1

要綁定到單個頁面,請在選擇器中使用它的ID,而不是'[data-role = page]',它選擇所有data-role屬性設置爲'page'的元素:'$('#我的頁面')。bind('pageinit',...)'。 – Jasper 2012-03-09 22:06:34

回答

7

jQuery有一個one函數來綁定一個事件處理程序只執行一次。檢查reference

+0

謝謝,我不知道這一個功能。 – Steve 2012-03-15 17:49:16

4

在jQuery Mobile框架初始化其小部件後,pageinit事件每頁觸發一次;我想這可能是你要找的。

pageinit

觸發頁面上的初始化,初始化發生之後。 我們建議綁定到此事件而不是DOM ready(),因爲此 將起作用,無論該頁面是直接加載還是作爲Ajax導航 系統的一部分被拉入另一個頁面。

來源:http://jquerymobile.com/demos/1.1.0-rc.1/docs/api/events.html

如果你想綁定到特定的頁面,而不是休息,然後選擇僅僅是頁面要改變......這裏有一個例子:

<script> 
$(document).delegate('#my-page-id', 'pageinit', function() { 
    alert("PageInit!"); 
}); 
</script> 
相關問題