1

私の問題:

面白そうに聞こえるかもしれませんが、ここに私の問題がselectあります。次の方法で成功すると、Ajaxを介してデータが入力されます。

$.each(data, function(key, value) {
            options += '<option value="' + key + '">' + value + '</option>';
        });

私のサーバーはソートされたマップでソートされた)を返します。すべて正常に動作します、Internet Explorer(7、8、および9)では、選択がソートされていないように見えます。

私が見つけたもの:

私が見つけたのは、IEが実際にパラメーターkeyに渡した順に並べ替えて表示していることです。value私のリストはバックエンドででソートされており、valueそのように表示したいと思います(Chrome、Firefoxなどで正常に動作します)。

$.eachこのソートの原因はおそらくjQuery関数だと思います。たぶんそれはキーによって繰り返されていますか?ただし、これについてはよくわかりませんので、フィードバックをお願いします。また、これを確認するために、マップ上で別の反復を行うにはどうすればよいですか?並べ替えはバックエンドで行われるため、jQueryの並べ替えを実行しないようにしています。

私は私がそれらを渡す方法に必要であり、渡されることを述べてkeyvalueますoption

編集-例:

それがどうあるべきか(そしてChromeとFirefoxにある):

<option value="13">A</option>
<option value="2">B</option>
<option value="55">C</option>

IEでの様子:

<option value="2">B</option>
<option value="13">A</option>
<option value="55">C</option>
4

2 に答える 2

2

問題は、オブジェクトが実際にはキーと値のペアの特定の順序を持​​っていないことです。IEはそれを変更するのは間違いではありません。代わりに、配列を使用してペアを保持します。たとえば、次のようになります。

[
    {
        "value": "13",
        "text": "A"
    },
    {
        "value": "2",
        "text": "B"
    },
    {
        "value": "55",
        "text": "C"
    }
]

そして、次のようにループします。

$.each(data, function(index, option) {
    options += '<option value="' + option.value + '">' + option.text + '</option>';
});

最後に、要素を構築するためにHTMLを文字列として操作しないでください。DOMを使用します。someElement.html(options);どこかにあると思いますか?代わりに、を作成してoptions = someElement;、これを実行します。

$.each(data, function(index, option) {
    options.append(
        $('<option>').prop('value', option.value).text(option.text)
    );
});
于 2012-05-08T13:50:41.237 に答える
0

ミニテックは正しいです。

順序がオブジェクト内にとどまると仮定するのは良いことですが、それは保証されておらず、任意の時間(またはIEでは常に)に中断する可能性があります。

ただし、別の解決策は、キーを通過する順序を持つソートされた配列を渡すことです。

[
  {
    13: 'A',
    2: 'B',
    55: 'C'
  },
  [ 13, 2, 55 ]
 ]
于 2012-05-08T13:58:23.760 に答える