我在想这里有一些基本的东西,迭代时将变量赋值给DOM事件侦听器
for (var i=1; i<=5; i++) {
var o = $('#asd'+i);
o.mouseover(function() {
console.info(i);
});
}
当鼠标悬停在五个不同的元素,我总是走不出从一个迭代的最后一个值;价值5
。我想要的是不同的值,取决于我徘徊的元素,全部从1
到5
。
我在这里做错了什么?
我在想这里有一些基本的东西,迭代时将变量赋值给DOM事件侦听器
for (var i=1; i<=5; i++) {
var o = $('#asd'+i);
o.mouseover(function() {
console.info(i);
});
}
当鼠标悬停在五个不同的元素,我总是走不出从一个迭代的最后一个值;价值5
。我想要的是不同的值,取决于我徘徊的元素,全部从1
到5
。
我在这里做错了什么?
你需要关闭,因为所有的鼠标悬停功能的引用相同的变量,其值正在改变:
for (var i=1; i<=5; i++) {
(function(j) {
$('#asd'+j).mouseover(function() {
console.info(j);
});
})(i);
}
通过创建一个封闭的可变j
是函数的局部范围内,将当“外部”i
更改时不会更改。
你需要用更多的闭包你的函数调用:
我认为这应该工作:
for (var i=1; i<=5; i++) {
var o = $('#asd'+i);
(function(j){
o.mouseover(function(){
console.info(j);
});
})(i);
}
在这种情况下i
是一个封闭的内部约束在每次迭代中,意味着添加到对象的所有函数都指向相同的变量,并且由于此变量在每次迭代时都增加,所有函数都引用最后递增的值。
避免这个问题的方法是通过值复制到一个新的变量瓶盖内
for (var i=1; i<=5; i++) {
var o = $('#asd'+i);
(function(newi) {
o.mouseover(function() {
console.info(newi);
});
}(i);
}
有确实有些基本的东西我是缺少:-)感谢一大堆! – ptrn 2010-06-01 19:42:07
这节省了我的一天。真正重要的是要知道。谢谢! – BobuSumisu 2012-08-17 14:47:49