2012-12-21 16 views
1

我一直在掙扎了以下功能:jQuery:on()現在比live()更受歡迎,但on()不適用於jQuery Mobile?

$('#pageName').on('pagebeforecreate', function() { 
    // Compile the page using Handlebars 
}); 

然後我試圖切換到onlive,儘管jQuery的文檔說live已被棄用。現在一切正常。是什麼賦予了?

+0

是否在頁面加載後動態創建'#pageName'? –

+0

是的,'#pageName'是一個單獨的頁面中的'data-role =「page」'元素,它通過jQuery Mobile的分頁系統加載到DOM中。但根據jQuery文檔,'on'函數現在應該關注這個... –

回答

2

使用代表團(那就是一個元素的DOM層次處理髮生在其後代事件)比你使用一個不同的.on()語法..(http://api.jquery.com/on/#direct-and-delegated-events

$('container-of-#pageName').on('pagebeforecreate','#pageName', function() { 
    // Compile the page using Handlebars 
}); 

當然,您需要將container-of-#pageName更改爲#pageName的容器選擇器。


如果你不能做到這一點,那麼你可以使用body這將模仿完全.live()但不建議

$('body').on('pagebeforecreate','#pageName', function() { 
    // Compile the page using Handlebars 
}); 
+0

使用$(document)作爲選擇器怎麼樣?這似乎有效,但這是可取的嗎? –

+0

這與「身體」是一樣的。這個想法是你想盡可能地接近'#pageName',以免長時間冒泡 –

+0

好的,我明白了。我不確定這可以通過jQuery Mobile處理分頁的方式避免,但是我認爲當您離開它們時,頁面會自動從DOM中移除,所以我不認爲會有過多的冒泡。謝謝! –

3

這發生在我身上了幾個次,它與javascript執行後動態生成的元素有關。

試試這個:

$('body').on('pagebeforecreate', '#pageName', function() { 
    // Compile the page using Handlebars 
}); 

你將要使用比body更好的父元素,但選擇一個不會改變。

+0

在jQuery mobile的情況下,pagebeforecreate的最佳狀態是由於頁面是直接的身體的孩子,fyi。 –

+0

@KevinB:實際上,我只是嘗試使用'body',它不起作用 - 'document'似乎工作正常。不知道爲什麼... –

+1

最有可能是因爲你的腳本在 –