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时调用回调
答案 0 :(得分:1)
没有上下文很难说,但假设在更改set文本字段时调用了不同的回调实例,那么回调的闭包上下文就会出现问题。
回调函数保存对全局dataDump对象的引用,该对象在迭代的每个循环中重新分配。因此,在for循环结束时,所有回调都只引用一个(最新的)dataDump对象。
尝试将“var”添加到分配行。
var dataDump = {};
答案 1 :(得分:1)
你在这段代码中使用window.dataDump
,所以你所有的回调函数都在使用同一个全局变量。
请尝试使用var dataDump = {};
。您可能还想在循环中移动globalData.push(dataDump);
。