Событие обработки для проблемы нескольких элементов - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть пара вопросов.

Почему не работает следующее?

var xps = ['+', '-', '*', '/'];

for (var i = 0; i < $('.operator').length; i++) {

  $('.operator:eq(' + i + ')').click(function () {    
    operatorGeneric(xps[i]);
  })

}

, где .operator - это класс, данный моим операторам, а operatorGeneric - этофункция, которая обрабатывает мои операторы.Когда я регистрирую xps [i], это дает мне неопределенное значение, а когда я ставлю, например, '+', в качестве параметра operatorGeneric, он работает нормально.

Мой второй вопрос: есть ли лучший способ сделать это?этот?Я стараюсь не писать отдельную функцию для каждого элемента.

1 Ответ

0 голосов
/ 24 апреля 2018

Вам нужно использовать замыкания, чтобы прикрепить событие внутри цикла:

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 .

...