在IE中,MooTools将json数据注入select中

时间:2015-03-03 06:39:27

标签: javascript internet-explorer mootools

我从PHP返回一些json数据并使用MooTools(1.5.1)将json对象中的项注入到选择框中。这很好用,但在IE(11)中,select元素完全填充了我的预期。 Firefox和Chrome都是正确的。 我返回的数据是db键和日期/时间值的列表。每对都是select元素中的一行。以下是返回的json数据的示例:

{"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按照上面显示的确切顺序填充select元素(最近的顶部),IE填充的顺序完全相反(最近的底部)。用于将项目注入select元素的代码如下所示。此代码片段位于MooTools" Request.JSON"在" onSuccess"块。

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

所以再一次,这对Chrome和Firefox来说是完美的,所以我有理由相信我将值注入select元素的方式是正确的,但为什么它最终会在IE中颠倒过来?我在想,也许IE正按照“价值”对这些项目进行排序。当它们被插入时,这会产生颠倒的问题,因为上面显示的json数据是DESC顺序。 (Chrome / FF显示的位置与插入的完全相同,也许IE会对导致它们更改为ASC顺序的值进行排序?)。

感谢您提供任何帮助或提示!

1 个答案:

答案 0 :(得分:2)

这与MooTools无关 - 但基本上,正如@sergio所说,当您遍历成员属性时,ECMA脚本不保证索引的顺序。 FIFO很好但并非总是如此。

所有规格都说是:

  

4.3.3对象

     

对象是Object类型的成员。它是一个无序集合属性,每个属性都包含一个基元   价值,对象或功能。存储在属性中的函数   对象称为方法。

另请参阅第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'}]的数组