我有一堆想要将mousedown()
函数附加到的类似列表项。所以我想做的就是替换这个:
$('#controls li[id=d1]').mousedown(function(){
console.log('d1');
});
$('#controls li[id=d2]').mousedown(function(){
console.log('d2');
});
有了这个:
var loopvar;
for (loopvar = 1; loopvar <= 2; loopvar++) {
$('#controls li[id=d' + loopvar + ']').mousedown(function(){
console.log('d' + loopvar);
});
}
(这是一个简化的示例-实际上我要处理许多
li
。)但是,当我单击
li
时,总是在控制台上得到d3
。循环结束时,loopvar
的值为3,因此看起来就是这样。那么如何使用循环附加功能呢? 最佳答案
你永远都不要那样做。
您应该使用类而不是ID。
无论如何要使用ID,请尝试:
$('#controls li[id^="d"]').mousedown(function(){
console.log($(this).attr('id'));
});
要使用循环,您必须使用闭包来传递var,但是使用上述方法分配这样的回调很不好。
for (var i = 0; i < 3; ++i) {
(function(loopvar) {
$('#controls li[id=d' + loopvar + ']').mousedown(function(){
console.log('d' + loopvar);
});
})(i);
}