在3个alert(i)上运行div onclick绑定行,但当单击所有这些行时,都会警告i的最后一个设置值。我希望我试图做的事情是有意义的,这很难解释。它不是提醒1、2或3,而是提醒3、3、3。
// Updates bar preview box
this.updatePropertyMarkerBox = function(self, BarsID) {
... snip ...
// Loop and add event handler
for (var i = 0; i < self.bars[BarsIndex].markers.length; i++) {
// Add click event
$("#bmi-" + self.containerId + "-" + i).bind('click', function() {
alert(i);
});
}发布于 2011-06-27 23:25:40
当您在for循环中迭代时,您实际上得到了i的地址,如果您当时在for循环中使用它,它将是预期的值,但是如果您稍后使用它(例如在单击事件中),它将指向最终递增的值3。要获得期望的效果,您可以创建一个匿名函数,如下所示
for (var i = 0; i < self.bars[BarsIndex].markers.length; i++) (function(i) {
// Add click event
$("#bmi-" + self.containerId + "-" + i).bind('click', function() {
alert(i);
});
})(i)发布于 2011-06-27 23:27:07
$("#bmi-" + self.containerId + "-" + i).bind('click', (function(i) {
return function() {
alert(i);
};
})(i));发布于 2011-06-27 23:29:44
虽然您可以在循环中使用invoke函数,创建一个新的变量作用域来捕获i的当前值,但另一种方法是直接从元素的ID属性中获取i值:
for (var i = 0; i < self.bars[BarsIndex].markers.length; i++) {
$("#bmi-" + self.containerId + "-" + i).bind('click', function() {
//grab the number from the ID of the element
alert( /\d+$/.exec( this.id )[0] );
});
}示例: http://jsfiddle.net/UGQA7/
https://stackoverflow.com/questions/6495156
复制相似问题