container.children在JAM的事件功能中工作

时间:2014-11-01 18:09:35

标签: jquery-mobile

<fieldset data-role='controlgroup' id='V14'>
<input id ='V14_1' type='radio' name='V14' value='1'><label for='V14_1'>UNO</label>
<input id ='V14_2' type='radio' name='V14' value='2'><label for='V14_2'>DOS</label>
<input id ='V14_3' type='radio' name='V14' value='3'><label for='V14_3'>TRES</label>
</fieldset>

我只想使用此功能对单选按钮进行排序,这非常有效:

var container = $("#V14");
var cbs = container.children('input');
var entry;
for (var i=0;i< cbs.length;++i){
   entry = $(cbs[Math.floor(Math.random() * cbs.length)]);
   entry.add(entry.next()).appendTo(container);
}

...但是当我在JQM事件中插入那段代码时,它并没有!

$(document).on('pagecontainerbeforeshow',function(e,ui){

现在它不起作用:

   var container = $("#V14");
   var cbs = container.children('input');
   var entry;
   for (var i=0;i< cbs.length;++i){
      entry = $(cbs[Math.floor(Math.random() * cbs.length)]);
      entry.add(entry.next()).appendTo(container);
   }
})

偶数&#39;页面容器显示&#39;得到完美的触发,我可以调试里面的代码.......当我检查cbs.length它得到ZERO!...但是如果我在这个事件之外运行相同的代码,cbs.length得到3!我的上帝,哪个是错误的?

1 个答案:

答案 0 :(得分:0)

首先,页面容器事件位于BODY标记而不是文档上。 其次,在那时,jQM增强了字段组,因此您需要对.ui-radio DIV进行排序,而不是对基础输入进行排序。最后,销毁并重新增强控制组,以便正确地重绘项目:

$("body").on("pagecontainerbeforeshow", function(e, ui){
    var container = $("#V14");
    var cbs = container.find('.ui-radio');

    var entry;
    for (var i=0;i< cbs.length;++i){
       entry = $(cbs[Math.floor(Math.random() * cbs.length)]);
       entry.add(entry.next()).appendTo(container);
    }
    container.controlgroup("destroy").controlgroup();
});
  

工作 DEMO