IE 7不支持关联数组?

时间:2012-03-01 10:36:51

标签: javascript object associative-array

我在从关联数组中检索数据时遇到问题。

要清楚,这就是我的代码:

var modelTable = {};

然后我向对象保存了一些东西:

//inside getJSON-call:
$.each(data.Models, function (index, val) {
    modelTable[val.Name] = val;
});

在这种情况下, val 只是一个json对象:

{
    Models : [
        {
            Name: "4-stroke (EBE)",
            ModelNumber: "VRE",
            Engine: "125ccm"
        }
    ]
}

但是当我尝试从我的modelTable获取数据时:

var model = modelTable["4-stroke (EBE)"];

根据IE的开发人员工具,该对象为null或未定义:

SCRIPT5007: Unable to get value of the property 'Name': object is null or undefined 

修改:大型代码段:

它基本上是两个用于搜索的输入字段(使用jQuery UI自动完成;不重要)。 第一个框用于选择摩托车品牌(制造商),然后在选择品牌并包含模型名称时填充第二。第二个输入字段的值(javascript .text()用于查找modelTable中的所有特定数据,因为我需要这些数据来提交我的搜索表单。

$(function () {
    if ($('#mc_search').length) {
        init_mc_makes();
    }
});

var modelTable = {};

function init_mc_makes() {
    //populates the brand drop down list in jquery ui autocomplete
}

function init_mc_models() {
    //populates the model drop down list in jquery ui autocomplete
    //and iterates the json data to save associative data in modelTable
    //calls submitSearch(name, brand)
}

function submitSearch(name, brand) {
    var model = modelTable[name];
    var chosenModelNumber = model.ModelNumber; //Unable to get value of the property 'ModelNumber': object is null or undefined 
    //submits form with data...
}

1 个答案:

答案 0 :(得分:0)

如果您显示的代码在dom-ready之后执行,则$()回调将同步执行。例如,此代码的输出:

$(function () { console.log(1); });
console.log(2);

取决于它是否在 DOM准备好之前执行(它将首先输出2,然后 - 当DOM最终准备好时 - 1)或< em>在之后就准备好了(在这种情况下,它会输出1,然后输出2)。

我怀疑你的代码只在DOM准备就绪时执行(例如,它在异步加载的文件中,或者本身包含在$()调用中)。是否发生这种情况可能确实取决于所使用的浏览器,因为脚本标记上的defer属性的可用性或构建DOM的速度实际上可以影响这一点。这只是猜测;没有更多的背景,很难说出来。

但是,如果这是正确的,则立即调用init_mc_makes();特别是,它在作业之前被调用

modelTable = {}

制作完成。由于变量提升,此时modelTable已存在,但它是undefined

如果这个理论是正确的,那就移动

var modelTable = {};

上面 $(...)来电应解决问题。