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]
实际上:)