Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает onclick (https://javascript.ru/forum/misc/73304-ne-rabotaet-onclick.html)

Dimasikylll 05.04.2018 03:39

Не работает onclick
 
let flips = document.querySelectorAll('.flip');

onclick = (event) => {
	if(flips[5] === event.target)
	{
	       alert("hello");
	}

   ...   //другие работающие функции
}

Почему не выводится hello при клике на флипс? Ошибок никаких не показывает и просто не хочет работать, но работает с другим вариантом:

flips[5].onclick = () => {
  alert('hello');
}


Оба варианта ведь должны работать, разве нет?

j0hnik 05.04.2018 03:56

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
<div class="flip">0</div>
<div class="flip">1</div>
<div class="flip">2</div>
<div class="flip">3</div>
<div class="flip">4</div>
<div class="flip">5</div>
	<script>

let flips = document.querySelectorAll('.flip');

flips.forEach((el,i)=>el.onclick = (event) => {
	if(i==5) alert("hello");
});

	</script>
</body>
</html>


У вас обработчик на воздух навешивается?

Dimasikylll 05.04.2018 04:11

В первом варианте клик считывается на всех элементах и таргет указывает, на каком именно элементе клик нужен, разве нет?

sortarray 05.04.2018 10:45

Цитата:

Сообщение от Dimasikylll (Сообщение 482355)
В первом варианте клик считывается на всех элементах и таргет указывает, на каком именно элементе клик нужен, разве нет?

Вообще то не на все, а на window

Но код работает

<html>
<head>
<meta charset = "utf-8" />
<style>
</style>
</head>

<body>

<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>
<div class = "flip">flip</div>

<script>

const flips = document.querySelectorAll(".flip")

onclick = function(event){
   if(flips[2] === event.target) alert(100)
}


</script>

</body>
</html>

Посмотрите, нет ли других ошибок

Dimasikylll 05.04.2018 14:13

Не выдаёт никаких ошибок и работает только при навешивании клика на каждый элемент, без понятия почему

Nexus 05.04.2018 14:38

Dimasikylll, вы все обработчики события click вешаете через свойство и на глобальный объект window?
Почитайте: https://learn.javascript.ru/introduc...82%D0%B2%D0%BE

Dimasikylll 05.04.2018 14:58

Я не вешаю несколько обработчиков на один элемент. Либо проверяю клик через window, либо просто вешаю клик на элемент. По отдельности оба способа должны работать, но у меня работает только при навешивании клика на элемент.

sortarray 05.04.2018 15:10

Цитата:

Сообщение от Nexus
Dimasikylll, вы все обработчики события click вешаете через свойство и на глобальный объект window?
Почитайте: https://learn.javascript.ru/introduc...82%D0%B2%D0%BE

То что там написано, это правда, но про "фундаментальный недостаток" автор явно погорячился, это фиксится парой строк.
С другой стороны, расхваливаемые им функции, типа addEventListener имеют свои недостатки, и они даже, по-моему, посерьезней

Так что этот способ вполне годный. Нет смысла отказываться от него.

Malleys 05.04.2018 15:21

Если что-то не получается или работает не как ожидалось, можно вывести в в консоль

onclick = event => {
    console.log(event, event.target);
};

Nexus 05.04.2018 15:23

Цитата:

Сообщение от sortarray
про "фундаментальный недостаток" автор явно погорячился, это фиксится парой строк.

Если вас не затруднит написать эти пару строк, продемонстрируйте их, пожалуйста.
Цитата:

Сообщение от sortarray
С другой стороны, расхваливаемые им функции, типа addEventListener имеют свои недостатки, и они даже, по-моему, посерьезней

Можете объяснить недостаток объявления обработчика этим методом?


Часовой пояс GMT +3, время: 02:29.