2012-09-20 83 views
1

我有兩個下拉菜單,由於更改第一個觸發jquery更改()的結果,它會在第一個下拉菜單中使用公司ID進行發佈。然後運行一個sql查詢來獲取適用於該公司的人員列表,並使用選項填充選擇框。這工作正常,我已經將sql查詢設置爲ORDER BY admin_name。但是,當jquery開始將選項插入到下拉列表中時,它似乎是通過選項值(admin_id)進行排序。我可以做些什麼來保留admin_name(選項的文本)排序的選項。下面是jQuery代碼負責添加的選項:jQuery新選項需要排序

$.post("listSignedBy.php", { company_id: company_id }, 
       function(data) { 
         alert(data); <-- this shows that the data is sorted correctly by the admin name. 
         var select = $('#signed_by'); 
         if(select.prop) { 
            var options = select.prop('options'); 
         } 
         else { 
            var options = select.attr('options'); 
         } 
         $('option', select).remove(); 

         var obj = jQuery.parseJSON(data); 
            options[options.length] = new Option('-- Select Signed By --', ''); 
         $.each(obj, function(val, text) { 
            options[options.length] = new Option(text, val); 
         }); 
         select.val(selectedOption); 

       }); 

謝謝你的任何援助,請讓我知道如果你需要任何進一步的信息,以幫助排除故障/修復。

按照要求,例如JSON數據:

{"19082":"Aaron Smith","19081":"Becky Doe"} 

因此,在這種情況下,我要的是:

<option value='19082'>Aaron Smith</option> 
<option value='19081'>Becky Doe</option> 

但不是由文本排序,它是由價值,所以我得到整理:

<option value='19081'>Becky Doe</option> 
<option value='19082'>Aaron Smith</option> 
+0

您可以發佈返回的JSON中列出的虛假條目嗎? –

+0

你可以發佈JSON數據..也許幾個條目被拒絕是好的 –

+0

更新了原來的帖子,謝謝。 –

回答

1

該對象沒有排序..它實際上是按順序插入它是如何迭代的。

但是,如果返回的響應順序不符合要求的順序,那麼最好的方法是先插入選項並對選項進行排序。見下文,

DEMO:http://jsfiddle.net/gGd82/3/

// convert OPTIONs NodeList to an Array 
// - keep in mind that we're using the original OPTION objects 
var ary = (function(nl) { 
    var a = []; 
    for (var i = 0, len = nl.length; i < len; i++) { 
     a.push(nl.item(i)); 
    } 
    return a; 
})(options); 
// sort OPTIONs Array 
ary.sort(function(a, b) { 
    return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;  
}); 
// remove all OPTIONs from SELECT (don't worry, the original 
// OPTION objects are still referenced in "ary") ;-) 
options.length = 0; 

// (re)add re-ordered OPTIONs to SELECT 
select.html(ary); 

select.prepend($('<option />').text('-- Select Signed By --').val('')); 

參考文獻:Sorting dropdown list using Javascript

+0

維加,非常感謝您的回覆。在您發佈您的響應之前(或與此同時),我幾分鐘就能獲得最終解決方案。我在自己的另一個答案中包含了我自己的決議。再次感謝。 –

0

我能夠得到它通過創建下列函數,然後引用該功能只。每個工作後()進入所有選項:

function Sort(a, b) {  
       return (a.innerHTML > b.innerHTML) ? 1 : -1; 
}; 

$.post("listSignedBy.php", { company_id: company_id }, 
       function(data) { 
         var select = $('#signed_by'); 
         if(select.prop) { 
            var options = select.prop('options'); 
         } 
         else { 
            var options = select.attr('options'); 
         } 
         $('option', select).remove(); 

         var obj = jQuery.parseJSON(data); 
            options[options.length] = new Option('-- Select Signed By --', ''); 
         $.each(obj, function(val, text) { 
            options[options.length] = new Option(text, val); 
         }); 
         $('#signed_by option').sort(Sort).appendTo('#signed_by'); 
         select.val(selectedOption); 

       }); 
+1

嘗試使用'return a.text b.text? 1:0;'比較器應該返回-1,0或1.另外'.text'優於'.innerHTML',但這可能就是我。 –