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

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

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

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

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

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