Рейтинг:
2
enhzflep
Вы совершили простую ошибку. Вы собираете 3 элемента в массивоподобную структуру (список узлов). Вы хотите применить прослушиватели событий к каждому из этих списков. Вместо этого вы пытаетесь применить прослушиватель событий к коллекции*, содержащей элементы*. Ой! Массив-как объекты не имеют прослушивателей событий...
Просто прикрепите обработчик к каждому из элементов в списке узлов
lists[0].addEventListener
lists[1].addEventListener
lists[2].addEventListener
Если вместо этого вы используете оператор распространения ES6, вы можете создать массив из списка узлов. Фактический массив имеет преимущество включения метода forEach.
var nodeList = document.querySelectorAll('.list');
var actualArray = [...nodeList];
actualArray.forEach( eachItemFunc };
function eachItemFunc(item, index, wholeCollection)
{
item.addEventListener('click', onListClicked, false);
}
function onListClicked(evt)
{
// do something useful here.
}
Member 14105304
я добавил первый сентенс. но это уже другая проблема.
перед загрузкой страницы и до нажатия кнопок функция уже запущена:
<!DOCTYPE html>
ЩЕЛЧОК
ЩЕЛЧОК
ЩЕЛЧОК
var lists = документ.querySelectorAll(".list");
console.log(списки); // [0, 1, 2]
var pickAnswer = Math.floor(Math.random() *3);
console.log(pickAnswer); // ???
списки[0].addEventListener("click", check());
списки[1].addEventListener("click", check());
списки[2].addEventListener("click", check());
функциональная проверка(){
предупреждение("кнопка нажата!");
}
Bryian Tan
вам нужно следовать второму варианту.
<script>
var nodeList = document.querySelectorAll('.list');
var actualArray = [...nodeList];
//actualArray.forEach( eachItemFunc };
actualArray.forEach(eachItemFunc);
function eachItemFunc(item, index, wholeCollection)
{
item.addEventListener('click', onListClicked, false);
}
function onListClicked(evt)
{
alert(1);
}
</script>
enhzflep
Ваша ошибка заключается в том, как вы прикрепляете слушателей событий. Что вам нужно сделать, так это указать адрес функции, используемой для обработки события. Вместо этого вы запускаете функцию, а затем присваиваете ее результат атрибуту обработчика событий. Ай!!
Это простая ошибка - просто уберите лишние скобки
lists[2].addEventListener("click", check());
должно быть
lists[2].addEventListener("click", check);
Member 14105304
Это единственный выход? Я ненавижу этот метод для каждого..
Member 14105304
это работает!! :O
но у меня застряли в еще одну проблему.
Я хочу сделать случайное число(что я уже сделал) и передать его через все классы ".list", и если они совпадают, и я нажму на совпадающее: я выиграю.
что-то вроде этого.
но код возвращает элемент, а не числовой номер массива.
и из-за этого я не могу получить доступ к этим кнопкам.
код:
<!DOCTYPE html>
ЩЕЛЧОК
ЩЕЛЧОК
ЩЕЛЧОК
var lists = документ.querySelectorAll(".list");
console.log(списки); // [0, 1, 2]
var pickAnswer = Math.floor(Math.random() *3);
console.log(pickAnswer); // ???
списки[0].addEventListener("click", check);
списки[1].addEventListener("click", check);
списки[2].addEventListener("click", check);
функциональная проверка(){
console.log(это);
}