Mail.ruПочтаМой МирОдноклассникиИгрыЗнакомстваНовостиПоискСмотриComboВсе проекты

Почему onclick не работает?

trash joys Ученик (12), закрыт 5 месяцев назад
Выдаёт ошибки: Cannot read property 'addEventListener' of null
и
Cannot set property 'background' of undefined
Лучший ответ
Дмитрий Гуру (3503) 5 месяцев назад
скорей всего не найден ни один элемент и b = undefined. Это можно проверить, если вывести в консоль console.log(b)
trash joysУченик (12) 5 месяцев назад
найдены все элементы, даже свойства и методы их выводит
ДмитрийГуру (3503) 5 месяцев назад
понятно, там массив. Нужно их перебрать просто в цикле
b.forEach(element => {
element.addEventListener("click", xxx(element))
})

function xxx(element) {
return function () {
element.style.background = "black"
}
}
trash joys Ученик (12) Я сделал так, алерт срабатывает, а бэкграунд выдаёт ошибку
ДмитрийГуру (3503) 5 месяцев назад
потому что нет доступа к "a" внутри метода start. Нужно его прокинуть, передав в качестве параметра ("click", start(a)), Но если мы так сделаем, то start будет вызываться сразу при навешивании, а нам нужно, чтобы он вызывался после нажатия. Поэтому внутри start нужно вернуть новую функцию con start = (a) => {
return () => {
// все остальное
}
}
trash joys Ученик (12) а разве var не делает переменную глобальной и доступной отовсюду?
ДмитрийГуру (3503) 5 месяцев назад
я неверно написал, имел ввиду не "a", а "a[i]", т. к. a - это массив, а нам нужен элемент - их мы получаем при переборе массива

("click", start(a[i]))

con start = (element) => {
return () => {
// все остальное
}
}
trash joys Ученик (12) О, заработало)) спасибо огромное тебе)
Остальные ответы
Александр Искусственный Интеллект (214353) 5 месяцев назад
попробуй что-нибудь реально выучить кроме фака...
Похожие вопросы
Также спрашивают