2015-11-08 93 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