Javascript 只有“我的for循环”中的最后一个数据指定
嘿,我有一个这样的简单循环:Javascript 只有“我的for循环”中的最后一个数据指定,javascript,Javascript,嘿,我有一个这样的简单循环: for(var i in nodes) { var d = document.createElement('div'); d.className = 'box'; d.id = 'node' + i; document.getElementById('node').appendChild(d); document.getElementById('node'+ i).innerHTML = nodes[i].name;
for(var i in nodes) {
var d = document.createElement('div');
d.className = 'box';
d.id = 'node' + i;
document.getElementById('node').appendChild(d);
document.getElementById('node'+ i).innerHTML = nodes[i].name;
document.getElementById('node'+ i).addEventListener('mousedown', function() {
var info = nodes[i]; display_parent(info);
}, false);
}
function display_parent(data){
console.log(data);
}
document.getElementById('node'+i).addEventListener('mousedown',
(function(node) {
return (function() {
display_parent(node);
});
}(nodes[i])), false);
问题是所有div都持有相同的信息,即循环中的最后一个,我试图将数据分配给一个局部变量info
,但它仍然不起作用
有什么办法可以解决吗?这是由于“mousedown”事件处理程序中的闭包造成的。您必须使用以下内容:
for(var i in nodes) {
var d = document.createElement('div');
d.className = 'box';
d.id = 'node' + i;
document.getElementById('node').appendChild(d);
document.getElementById('node'+ i).innerHTML = nodes[i].name;
document.getElementById('node'+ i).addEventListener('mousedown', function() {
var info = nodes[i]; display_parent(info);
}, false);
}
function display_parent(data){
console.log(data);
}
document.getElementById('node'+i).addEventListener('mousedown',
(function(node) {
return (function() {
display_parent(node);
});
}(nodes[i])), false);
看来你忘记关闭
loopwoops的了!是复制粘贴错误:p未正确关闭i
的值。您可以使用节点[this.id.substr(4)]
而不仅仅是节点[i]
实际上:)