IE 7/8 javascript排序错误“预期数量”

时间:2012-03-26 16:01:43

标签: javascript internet-explorer error-handling

我有JSON对象

var x=[{@Name:'test 1',@Sort:'1',@Status:'yes'},
       {@Name:'test 2',@Sort:'5',@Status:'yes'},
       {@Name:'test 3',@Sort:'4',@Status:'no'},
       {@Name:'test 5',@Sort:'2',@Status:'no'}]

我正试图通过@ Sort,@ Name和@Status对obj进行排序。

    var orderBy="@Sort";
    x.sort(_sortObj(orderBy));

    function _sortObj(orderBy){
        return function(a,b){
           return (a[orderBy]<b[orderBy])?1:0....etc
        }
    }

它在Firefox和Chrome中运行良好......

但在IE 7/8中抛出错误为“预期的数字” 在线

  x.sort(_sortObj(orderBy));

我不确定发生了什么事,如果有人正确解决这个问题会很好。

4 个答案:

答案 0 :(得分:1)

这不是JSON对象。属性名称和值必须用“双引号”括起来。

这可能是旧IE中出错的原因,它不理解@在那里。

答案 1 :(得分:1)

除了Kolink的回答,IE可能不会将你的字符串数字强制转换为<比较的实际数字对象。你可以通过乘以1来实现这种强制:

return (a[orderBy]*1 < b[orderBy]*1) ? 1 : 0;

答案 2 :(得分:0)

我使用下面的排序插件解决了这个问题,

http://www.thomasfrank.se/downloadableJS/objSort.js

感谢各位帮助我的人

答案 3 :(得分:0)

我和你有同样的问题,看起来这是一个IE问题,也许你可以试试这个:

var orderBy="@Sort";
x.sort(_sortObj(orderBy));

function _sortObj(orderBy){
    return function(a,b){
       var aa = a,bb = b;
       return (aa[orderBy]<bb[orderBy])?1:0....etc
    }
}

你可以从这里找到一些帮助:http://www.zachleat.com/web/array-sort/comment-page-1/#comment-3941