2015-11-08 90 views
2

請看下面的非常簡單的代碼摘錄:頁面加載後添加jQueryMobile元素

(...) 
<div id="myDiv"></div> 

<script> 
    function appendSomeJQueryMobileStuff() { 
     $('#myDiv').append($('<select/>')); 
    } 

    appendSomeJQueryMobileStuff(); 

    $(document).on('pageinit', function() { 
     appendSomeJQueryMobileStuff(); 
    }); 

</script> 

(嘗試一下@https://jsfiddle.net/ca544oob/

爲什麼只用jQuery顯示第一<select>,但第二個ISN根本沒有格式化?我所看到的兩個函數調用之間唯一的區別就是它發生的時刻。

我該如何解決這個問題?

回答

4

使用jQuery移動,選擇菜單插件自動包含選擇菜單的任何頁面上進行初始化,而無需在markup.You一個data-role屬性可以從官方文檔here查看詳細信息。在你的情況,你是在附加pageinitselect,所以你需要通過增加

$("select").selectmenu(); 

$('#myDiv').append($('<select/>')); 

手動初始化select menu plugin你最後的工作代碼就會像..

(...) 
<div id="myDiv"></div> 

<script> 
    function appendSomeJQueryMobileStuff() { 
     $('#myDiv').append($('<select/>')); 

    } 

    appendSomeJQueryMobileStuff(); 

    $(document).on('pageinit', function() { 
     appendSomeJQueryMobileStuff(); 

    // Initialization of Select Menu Plugin 
     $("select").selectmenu(); 
    }); 

</script> 

希望它能爲你工作。

+0

所以任何插件將永遠不會在任何元素上工作,如果它是在頁面加載後應用?這意味着,對於每個新元素,需要初始化整個頁面上所有元素的插件?這不是完全浪費資源嗎?難道不能簡單地在頭部初始化一個選擇菜單插件嗎? – Blauhirn

+0

對於單個頁面,如果您在一個位置初始化插件,則每次添加新選擇時都不需要初始化該插件。和Append語句一樣,你只是實現'選擇',所以一次初始化是必須的。你可以移動'$(「select」).selectmenu();'在函數調用後的'pageinit'中。 –

+0

好的,我明白了。然而,在一個選擇對象上調用'.selectmenu()'只對我更有意義。謝謝! – Blauhirn