2

我正在使用 JQuery 填充 SELECT 元素以减少输出标记的大小。

一切都按照我想要的方式进行,除了一件事;排序。

看起来当我到达.each下面的代码时,JQuery 正在按val值而不是text值排序。我希望列表按text值排序,或者更理想的是,按照我在变量中生成列表的顺序dyn_list_product

我怎样才能做到这一点?

非常感谢。

<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="utf-8">
    <title>Sample Code</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    <script type = "text/javascript" >
      $(document).ready(function(){
      var dyn_list_product = { 10075:'abc', 10635:'def', 10246:'ghi', 10245:'jkl', 10076:'mno', 10642:'pqr', 10995:'stu', 10255:'vwx', 10230:'yz' };
      $('.jquery_list_product').append( $('<option></option>').val('').html('----------') );
      $.each( dyn_list_product , function(val, text) { $('.jquery_list_product').append( $('<option></option>').val(val).html(text) ); });
      })
    </script>
  </head>

  <body>
    <select name="insert-1[]" class="jquery_list_product"></select>
    <select name="insert-2[]" class="jquery_list_product"></select>
    <select name="insert-3[]" class="jquery_list_product"></select>
  </body>
</html>
4

1 回答 1

3

jQuery 代码没有对任何东西进行排序。JavaScript 中未定义对象键的迭代顺序。也就是说,您以某种顺序定义属性这一事实并不意味着.each()函数将它们传递给您的处理程序的顺序。

改用数组:

var dyn_list_product = [ { key: '10075', val: 'abc'}, { key: '10635', val: :'def'}, ... ];

您的.each()循环将如下所示:

$.each( dyn_list_product , function(index, obj) {
    $('.jquery_list_product').append( $('<option></option>').val(obj.key).html(obj.val) ); });
})
于 2012-12-31T22:25:13.130 回答