IE 8中的JQuery脚本失败! “对象不支持此属性或方法” - 兼容性问题?

时间:2013-09-26 14:11:46

标签: jquery internet-explorer-8

我有跟随jquery脚本的html页面。 IE8中的脚本在以下行中失败:

var dataCopy = JSONObject[event];
for (data in dataCopy)
我收到的

错误消息是:“对象不支持此属性或方法”。相同的代码在Chrome和Firefox中运行良好。任何建议都会很棒。我想要获得所有不同的年份值。

 !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
        <title>
          Google Visualization API Sample
        </title>
        <script type="text/javascript" src="http://www.google.com/jsapi"></script>
        <script src="..\Scripts\jquery-1.7.1.js" type="text/javascript"></script>
        <script type="text/javascript">
          google.load('visualization', '1', {packages: ['corechart', 'geochart', 'table'] });
        </script>
        <script type="text/javascript">
          function drawVisualization() {



            var JSONObject = {
                    cols: [{
                        id: 'Year', label: 'Year', type: 'string'
                    },{
                        id: 'data1', label: 'col2', type: 'number'
                    },{
                        id: 'data2', label: 'col3', type: 'number'
                    }],
                    rows: [{
                        c:[{v: '2000'}, {v: null}, {v: 3}]
                    },{
                        c:[{v: '2001'}, {v: 8}, {v:3 }]
                    },{
                        c:[{v: '2004'}, {v: 2.1244322}, {v: 4}]
                    }
                ]};

            var yearArray = [];

            for (var event in JSONObject) {
                var dataCopy = JSONObject[event];
                for (data in dataCopy) {
                    var mainData = dataCopy[data];
                    for (key in mainData) {
                        if (key.match(/c/)) {
                            var row = mainData[key];
                                yearArray.push(row[0].v);

                        }
                    }
                }
            }

            alert(yearArray.length);
}
</script>

2 个答案:

答案 0 :(得分:2)

IE8以外的浏览器支持使用for ... in iteration方法迭代数组。 IE8没有 - 它只支持以这种方式迭代对象。

我看到你的页面上有jQuery,所以看看$.each - 它会在对象和数组上做你想要的。

答案 1 :(得分:0)

我创建了另一个数组并用于循环来解决这个问题。像Adam建议我也可以使用$ .each函数。

var dataCopy = [];

        for (var event in JSONObject) {
            dataCopy = JSONObject[event];
            for (var k=0; k < dataCopy.length; k = k+1) {
                var mainData = dataCopy[k];
                for (key in mainData) {
                    if (key.match(/c/)) {
                        var row = mainData[key];
                            yearArray.push(row[0].v);

                    }
                }
            }
        }