Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.04.2018, 03:39
Новичок на форуме
Отправить личное сообщение для Dimasikylll Посмотреть профиль Найти все сообщения от Dimasikylll
 
Регистрация: 01.12.2017
Сообщений: 8

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

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

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

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

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


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

Последний раз редактировалось Dimasikylll, 05.04.2018 в 03:42.
Ответить с цитированием
  #2 (permalink)  
Старый 05.04.2018, 03:56
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!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>


У вас обработчик на воздух навешивается?
Ответить с цитированием
  #3 (permalink)  
Старый 05.04.2018, 04:11
Новичок на форуме
Отправить личное сообщение для Dimasikylll Посмотреть профиль Найти все сообщения от Dimasikylll
 
Регистрация: 01.12.2017
Сообщений: 8

В первом варианте клик считывается на всех элементах и таргет указывает, на каком именно элементе клик нужен, разве нет?
Ответить с цитированием
  #4 (permalink)  
Старый 05.04.2018, 10:45
Кандидат Javascript-наук
Отправить личное сообщение для sortarray Посмотреть профиль Найти все сообщения от sortarray
 
Регистрация: 19.09.2015
Сообщений: 117

Сообщение от Dimasikylll Посмотреть сообщение
В первом варианте клик считывается на всех элементах и таргет указывает, на каком именно элементе клик нужен, разве нет?
Вообще то не на все, а на 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>

Посмотрите, нет ли других ошибок
Ответить с цитированием
  #5 (permalink)  
Старый 05.04.2018, 14:13
Новичок на форуме
Отправить личное сообщение для Dimasikylll Посмотреть профиль Найти все сообщения от Dimasikylll
 
Регистрация: 01.12.2017
Сообщений: 8

Не выдаёт никаких ошибок и работает только при навешивании клика на каждый элемент, без понятия почему
Ответить с цитированием
  #6 (permalink)  
Старый 05.04.2018, 14:38
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Dimasikylll, вы все обработчики события click вешаете через свойство и на глобальный объект window?
Почитайте: https://learn.javascript.ru/introduc...82%D0%B2%D0%BE
Ответить с цитированием
  #7 (permalink)  
Старый 05.04.2018, 14:58
Новичок на форуме
Отправить личное сообщение для Dimasikylll Посмотреть профиль Найти все сообщения от Dimasikylll
 
Регистрация: 01.12.2017
Сообщений: 8

Я не вешаю несколько обработчиков на один элемент. Либо проверяю клик через window, либо просто вешаю клик на элемент. По отдельности оба способа должны работать, но у меня работает только при навешивании клика на элемент.
Ответить с цитированием
  #8 (permalink)  
Старый 05.04.2018, 15:10
Кандидат Javascript-наук
Отправить личное сообщение для sortarray Посмотреть профиль Найти все сообщения от sortarray
 
Регистрация: 19.09.2015
Сообщений: 117

Сообщение от Nexus
Dimasikylll, вы все обработчики события click вешаете через свойство и на глобальный объект window?
Почитайте: https://learn.javascript.ru/introduc...82%D0%B2%D0%BE
То что там написано, это правда, но про "фундаментальный недостаток" автор явно погорячился, это фиксится парой строк.
С другой стороны, расхваливаемые им функции, типа addEventListener имеют свои недостатки, и они даже, по-моему, посерьезней

Так что этот способ вполне годный. Нет смысла отказываться от него.
Ответить с цитированием
  #9 (permalink)  
Старый 05.04.2018, 15:21
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

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

onclick = event => {
    console.log(event, event.target);
};
Ответить с цитированием
  #10 (permalink)  
Старый 05.04.2018, 15:23
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

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

Последний раз редактировалось Nexus, 05.04.2018 в 15:28.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OnClick не всегда работает denisko96 Events/DOM/Window 2 30.12.2013 20:02
Ajax при заходе на страницу из поисковика - не работает Алексей_ГР Ваши сайты и скрипты 2 03.09.2013 00:03
Код работает не так как задумал. Обработчик onclick prowoke Общие вопросы Javascript 2 20.07.2011 23:31
Не работает код внутри циклов DZHETIGAPA Events/DOM/Window 1 21.06.2011 01:03
ява-скрипт выборочно работает-не работает zeta777 Internet Explorer 0 20.01.2010 11:41