2014-11-01 49 views
-4
<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> 

我只是想用這個功能,它完美的作品單選按鈕來進行排序:container.children不whitin JQM的事件函數工作

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); 
    } 
}) 

偶「pagecontainerbeforeshow」被完全觸發,我可以調試的代碼裏面.......當我檢查cbs.length它得到ZERO!...但是如果我在這個事件之外運行相同的代碼,cbs.length會得到3!...我的上帝,錯誤的地方在哪裏?

回答

0

首先,頁面容器事件在BODY標籤上而不是文檔。 其次,在這一點上,jQM增強了fieldgroup,所以你需要對.ui-radio DIV進行排序,而不是基礎輸入。最後,破壞並重新提升controlgroup所以項目被重繪正確:

$("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

+0

沒關係,我只是想知道,如果在組單選按鈕,這是一個SELECT (下拉菜單) – 2014-11-01 19:08:58

+0

@AbrahamPetit,那麼你將使用OPTIONs並刷新selectmenu小部件:.selectmenu(「refresh」,true)http://api.jquerymobile.com/selectmenu/#method-refresh – ezanker 2014-11-01 20:00:16