我有一堆想要将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);
}

09-20 20:36