Прежде чем читать: да, это общий вопрос. Однако ни один из них не решил мою проблему, а также никто / почти никто не использовал цикл for, что вызывает у меня проблемы.
Мой код создает 5 DIV, каждый из которых имеет свой собственный идентификатор и должен иметь своего собственного уникального слушателя onClick. Но добавление eventListener с аргументом не работает так, как я хочу.
Чтобы получить правильный вывод при нажатии элемента onClick, мне нужно передать аргумент функции, которая запускается onClick. Посмотрите на код.
Я видел много других людей, имеющих эту проблему, но никто из них не решил эту проблему. Я пробовал это (анонимная функция):
div.addEventListener("click", function() {
calc(i);
}, false);
Однако на всех слушателях событий я получаю аргумент со значением 6, что означает, что я не получаю отдельные onClicks для DIV (моя цель). Все элементы onClick возвращают "шесть" в консоли.
for (i = 1; i < 6; i++) {
var div = document.createElement("div");
div.setAttribute("id", "i"+i);
div.setAttribute("class", "test-item");
div.innerHTML = i;
div.addEventListener("click", function() {
calc(i);
}, false);
document.querySelector(".testContainer").appendChild(div);
}
function calc(num) {
switch (num) {
case 1:
console.log("one");
break;
case 2:
console.log("two");
break;
case 3:
console.log("three");
break;
case 4:
console.log("four");
break;
case 5:
console.log("five");
break;
case 6:
console.log("six");
break;
default:
console.log("Error");
break;
}
}
Здесь:
https://jsfiddle.net/nbps7mdr/3/
Что я ожидаю:
Когда я нажимаю div с номером 1, я получаю «one» в консоли.
Я не ожидаю получить «шесть» вообще, потому что максимальное число должно быть 5. Существует что-то неправильное, означающее, что 6 отправляется с i.