处理多元素问题的事件

时间:2018-04-24 11:20:01

标签: jquery onclick event-handling

我有几个问题。

为什么不进行以下工作?

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的参数时,它工作正常。

我的第二个问题是,有更好的方法吗?我试图避免为每个元素写出单独的函数。

1 个答案:

答案 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 建议。