2013-07-03 34 views
0

我有一個下拉列表,由另一個下拉列表的選中觸發的AJAX填充。 這個AJAX調用一個web服務,它返回一個Dictionary,然後我在jQuery中迭代以填充下拉列表。下拉列表排序在IE中不同

我遇到的問題是,在Chrome中,下拉列表是正確排序的,但在IE8中,下拉列表的前兩個選項位於錯誤的位置。

即 相反下拉之中的:

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

的Webservice:

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() 
+1

是'JSON'對象或數組?我認爲一個對象不能被命令保證。 –

+0

這是一個對象,我發現奇怪的是,其他所有選項在IE中的行爲都是正確的,甚至這個選項在Chrome中也是如此。 –

+1

我認爲沒有關於對象順序實現的具體建議,所以也許Chrome開發者決定保留原始訂單 –

回答

0

dictProducts將最有可能被字符串化作爲一個對象。

我想你應該使用一個數組,因爲js對象沒有排序。

請檢查這太問題
Does JavaScript Guarantee Object Property Order?

+0

,但是你知道爲什麼這樣的事情只會影響一個選項嗎?我希望瞭解造成這種情況的原因 –

+0

當你說「選項」時,你的意思是「1」,「2」,「5」,「10」吧? –

+0

對不起,我的意思是這個下拉列表是基於另一個下拉列表中的選擇來填充的。並且在該下拉菜單中的選項不是原始順序的原始下拉列表中只有一個選項。 –