0

我正在尝试为对象列表设置不同的侦听器:

for(i=0;i<numInputs;i++) {
    var inPort = inputPorts.get(i);
    var portName = inPort.getProperty("name");
    inPort.shape.attr({ cursor: 'pointer' }).mouseover(function(e) { mouseOverInfo.text("PORT:: "+portName); }); 
}

现在发生的情况是,每个端口对象都只是将最后一个元素的名称作为自己的名称。因此,当我将鼠标悬停时,我只返回最后一个对象的名称。

如何正确执行此操作?

谢谢

4

1 回答 1

1

使用这样的自调用函数来避免循环中的闭包问题:

for(i=0;i<numInputs;i++) {
  (function(i){
    var inPort = inputPorts.get(i);
    var portName = inPort.getProperty("name");
    inPort.shape.attr({ cursor: 'pointer' }).mouseover(function(e) { mouseOverInfo.text("PORT:: "+portName); }); 
  })(i)
}
于 2012-09-09T16:42:03.210 回答