2015-03-03 19 views
2

我從PHP返回一些JSON數據和使用MooTools(1.5.1)將json對象中的項目注入選擇框。這很好,但在IE(11)中,select元素恰好在我想要的東西后面填充。 Firefox和Chrome是正確的。 我要返回的數據是db鍵和日期/時間值的列表。每一對都是select元素中的一行。這裏是返回的JSON數據的例子:MooTools注入JSON數據到選擇是向後在IE

{"26165":"2015-03-03 06:11:17","26145":"2015-03-03 05:11:17","26125":"2015-03-03 04:11:17","26105":"2015-03-03 03:11:17"} 

我不能發佈圖片...但Chrome和Firefox填充選擇元素在上面顯示(最近在頂部)的確切順序和IE填充按照完全相反的順序(最近在底部)。下面是用於將項目注入到select元素的代碼。此代碼片段位於「onSuccess」塊中的MooTools「Request.JSON」中。

Object.each(list, function(value, key){ 
    new Element('option', {'value':key, 'text':value}).inject(select_element); 
}); 

如此反覆,這個作品非常適合Chrome和Firefox,所以我有理由相信我注射值到選擇元素的方法是正確的,但爲什麼它結束了在IE倒掛?我想,也許IE插入這些項目時,他們插入'價值',這會給倒過來的問題,因爲上面顯示的JSON數據是在DESC順序。 (Chrome/FF顯示的內容與插入內容完全相同,也許IE會根據導致它們更改爲ASC順序的值進行排序?)。

感謝您的任何幫助或提示!

+1

一個數組,我不能看到IE11和其他人(HTTP之間的任何差別://的jsfiddle。 net/1syqbq6s /),但已知對象鍵的順序不保證。也許你應該從serverside傳遞一個數組來確保(?)。你可以製作一個能重現問題的jsFiddle,以便我們看看它嗎? – Sergio 2015-03-03 08:03:15

+0

使用數組可以保證數據的順序。如果它解決了您的問題,請不要忘記將答案標記爲已接受。 – Sergio 2015-03-10 17:48:16

回答

2

這與MooTools無關 - 但基本上,就像@sergio所說的,ECMA腳本並不能保證在遍歷成員屬性時索引的順序。先進先出是好的,但並不總是。

所有規範說是:

4.3.3對象

一個目的是對象的類型的成員。它是一個無序集合的屬性,其中每個屬性都包含原始值,對象或函數。存儲在 對象的屬性中的函數稱爲方法。

另請參見第12.6.4:枚舉沒有指定...的屬性

的機制和秩序。

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

不同的瀏覽器處理這個不同,例如。當您的for (var key in obj)其中鍵具有數字和字符串值時,數字鍵將首先出現。 FireFox,它是FIFO。 IE - 別的東西。

向你敞開的唯一一件事情就是墊_鍵,使他們都被視爲簡單的字符串 - 或使用像[{key: 12313, value: 'some date'}]

+0

令人驚歎。感謝您的鏈接和信息。現在,你說我可以通過使用一個數組來解決這個問題,所以如果我把我的json對象變成一個數組,然後將它加載到select中,這可能會起作用嗎?將不會回來測試幾天,但現在所有的焦慮。 – Deltaxfx 2015-03-06 23:00:47