Last Object总是会更新?

时间:2011-08-17 15:21:11

标签: javascript

function createTextFields(obj) {    
    for (var i = 0; i < obj.length; i++) {
        dataDump = {};    
        for (var key in obj[i]) {
            dataDump[key] = textField.value;
            var callback = function (vbKey) {
                    return function (e) {
                        dataDump[vbKey] = e.source.value;
                    };
            }(key); 
        }
    }
    globalData.push(dataDump);
}

每次从对象创建一个新文件时,我都会在点击按钮时创建textFields。当我更改第一个或第二个或第三个TextFields并单击update ...时,在第四个或最后一个TextFields TextField的对象上更新值得到...

在更改TextFields时调用回调

2 个答案:

答案 0 :(得分:1)

没有上下文很难说,但假设在更改set文本字段时调用了不同的回调实例,那么回调的闭包上下文就会出现问题。

回调函数保存对全局dataDump对象的引用,该对象在迭代的每个循环中重新分配。因此,在for循环结束时,所有回调都只引用一个(最新的)dataDump对象。

尝试将“var”添加到分配行。

    var dataDump = {};    

答案 1 :(得分:1)

你在这段代码中使用window.dataDump,所以你所有的回调函数都在使用同一个全局变量。

请尝试使用var dataDump = {};。您可能还想在循环中移动globalData.push(dataDump);