我有几个问题。
为什么不进行以下工作?
var xps = ['+', '-', '*', '/'];
for (var i = 0; i < $('.operator').length; i++) {
$('.operator:eq(' + i + ')').click(function () {
operatorGeneric(xps[i]);
})
}
其中.operator
是给我的运算符的类,而operatorGeneric
是一个处理我的运算符的函数。当我记录xps [i]时它给我未定义,当我把&#39; +&#39;,例如,作为operatorGeneric的参数时,它工作正常。
我的第二个问题是,有更好的方法吗?我试图避免为每个元素写出单独的函数。
答案 0 :(得分:2)
您需要使用闭包来在循环中附加事件:
var xps = ['+', '-', '*', '/'];
for (var i = 0; i < $('.operator').length; i++) {
(function (i) {
$('.operator:eq(' + i + ')').click(function () {
operatorGeneric(xps[i]);
});
})(i);
}
或使用类似的功能:
var xps = ['+', '-', '*', '/'];
for (var i = 0; i < $('.operator').length; i++) {
attachEvent(i);
}
function attachEvent(i){
$('.operator:eq(' + i + ')').click(function () {
operatorGeneric(xps[i]);
});
}
或者只需将var i
替换为let i
@Hikarunomemory 建议。