0

別のドロップダウンの onselect によってトリガーされる AJAX によって入力されるドロップダウン リストがあります。この AJAX は、Dictionary を返す Web サービスを呼び出し、それを jQuery で反復処理してドロップダウン リストに入力します。

私が抱えている問題は、Chrome ではドロップダウン リストが正しく並べられているが、IE8 ではドロップダウンの最初の 2 つのオプションが間違った場所にあることです。

つまり、ドロップダウンの代わりに:

1
2
5
10

それは

5
10
1
2

誰かが以前にこれに出くわしたことがありますか? IE のバグですか、それとも何か理由があるのでしょうか? 反復されるオブジェクトは正しい順序になっているため、最初に 3 番目/4 番目のアイテムに移動する理由がわかりません。

コード:

function changeProduct($tr) {
    var $product = $tr.find('select.product');
    var $version = $tr.find('select.version');
    var $quantity = $tr.find('input.quantity');
    var dataString = {
        sProductId: $product.val()
    };
    $.ajax({
        type: "POST",
        url: "http://site.com/services/calculator.asmx/getVersionOfProduct",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(dataString),
        dataType: "json",
        success: function(response) {
            var JSON = jQuery.parseJSON(response.d);
            emptyDropdown($version);
            $.each(JSON, function(key, value) {
                $version.append($('<option>').val(key).text(value));
            });
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });
}

ウェブサービス:

Dim dictProducts As IDictionary(Of String, String) = SmsCalculatorProductFunctions.getVersionsForProduct(sProductId)
Dim js As New System.Web.Script.Serialization.JavaScriptSerializer
Dim sb As New StringBuilder
js.Serialize(dictProducts, sb)

Return sb.ToString()
4

1 に答える 1

0

dictProductsほとんどの場合、オブジェクトとして文字列化されます。

js オブジェクトは順序付けされていないため、配列を使用する必要があると思います。

このSOの質問を確認してください
JavaScriptはオブジェクトプロパティの順序を保証しますか?

于 2013-07-03T09:41:55.897 に答える