В качестве объяснения: анонимная функция, которую вы используете в цикле for, ссылается на переменную «i», чтобы заставить элемент переключаться.Поскольку анонимные функции используют «живое» значение переменной, когда кто-то щелкает элемент, «i» всегда будет elementsList.length + 1.
Пример кода из Matt решает эту проблему, вставляя i в другойфункция, в которой он «зациклен».Это всегда верно:
Если вы перебираете элементы, присоединяющие события, не используйте простые анонимные функции, когда они облажаются, а скорее создайте новую функцию для каждого элемента.Более читаемая версия ответа Мэтта будет:
function iterate () {
for (var i = 0; i < list.length; i++) {
// In here, i changes, so list[i] changes all the time, too. Pass it on!
list[i].addEventListener(createEventFunction(list[i]);
}
}
function createEventFunction (item) {
// In here, item is fixed as it is passed as a function parameter.
return function (event) {
alert(item);
};
}