我一直在掙扎了以下功能:jQuery:on()現在比live()更受歡迎,但on()不適用於jQuery Mobile?
$('#pageName').on('pagebeforecreate', function() {
// Compile the page using Handlebars
});
然後我試圖切換到on
live
,儘管jQuery的文檔說live
已被棄用。現在一切正常。是什麼賦予了?
我一直在掙扎了以下功能:jQuery:on()現在比live()更受歡迎,但on()不適用於jQuery Mobile?
$('#pageName').on('pagebeforecreate', function() {
// Compile the page using Handlebars
});
然後我試圖切換到on
live
,儘管jQuery的文檔說live
已被棄用。現在一切正常。是什麼賦予了?
使用代表團(那就是一個元素的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
});
使用$(document)作爲選擇器怎麼樣?這似乎有效,但這是可取的嗎? –
這與「身體」是一樣的。這個想法是你想盡可能地接近'#pageName',以免長時間冒泡 –
好的,我明白了。我不確定這可以通過jQuery Mobile處理分頁的方式避免,但是我認爲當您離開它們時,頁面會自動從DOM中移除,所以我不認爲會有過多的冒泡。謝謝! –
這發生在我身上了幾個次,它與javascript執行後動態生成的元素有關。
試試這個:
$('body').on('pagebeforecreate', '#pageName', function() {
// Compile the page using Handlebars
});
你將要使用比body
更好的父元素,但選擇一個不會改變。
在jQuery mobile的情況下,pagebeforecreate的最佳狀態是由於頁面是直接的身體的孩子,fyi。 –
@KevinB:實際上,我只是嘗試使用'body',它不起作用 - 'document'似乎工作正常。不知道爲什麼... –
最有可能是因爲你的腳本在
–
是否在頁面加載後動態創建'#pageName'? –
是的,'#pageName'是一個單獨的頁面中的'data-role =「page」'元素,它通過jQuery Mobile的分頁系統加載到DOM中。但根據jQuery文檔,'on'函數現在應該關注這個... –