1

2つのドロップダウンがあります。最初のドロップダウンを変更すると、最初のドロップダウンの会社IDで投稿を行うjquery change()がトリガーされます。次に、SQLクエリを実行して、その会社で働いている人のリストを取得し、選択ボックスにオプションを入力します。これは正常に機能しており、SQLクエリをORDERBYadmin_nameに設定しています。しかし、jqueryがドロップダウンにオプションを挿入し始めると、代わりにオプション値(admin_id)でソートされているように見えます。admin_name(オプションのテキスト)順にオプションを並べ替えるにはどうすればよいですか。以下は、オプションの追加を担当する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>
4

2 に答える 2

1

オブジェクトはソートされていません。実際には、繰り返される順序で挿入されています。

ただし、返される応答の順序が目的の順序でない場合は、最初にオプションを挿入してオプションを並べ替えるのが最善の方法です。下記参照、

デモ: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(''));

参照: Javascriptを使用したドロップダウンリストの並べ替え

于 2012-09-24T16:05:30.230 に答える
0

次の関数を作成し、次のすべてのオプションを入力した.each()の直後にその関数を参照することで、機能させることができました。

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

                }); 
于 2012-09-24T16:10:28.637 に答える