Событие Mousemove после события Onclick

У меня есть аналогичная проблема, но я использую чистый js. Насколько я понимаю, после того, как я щелкнул div, он должен начать выводить на консоль сообщение `` Событие перемещения мыши '' каждый раз, когда я перемещаю курсор над div, но на самом деле это происходит только один раз, когда я щелкаю div, что тоже странно, потому что щелчок не mosemove. Не могли бы вы помочь мне разобраться в этом поведении?

<div style = "width:100px; height:100px; border:solid black 1px" onclick = "handleClick(event)"></div>
  <script>
    let div = document.getElementsByTagName('div')[0];

    function handleClick(event){
      div.addEventListener('onmousemove', handleMove(event));
    }

    function handleMove(event){
      console.info('Mousemove event has occurred');
    }
  </script>
Looks like it ignores this part div.addEventListener('onmousemove', handleMove(event)); and executes handleMove(event); instead:

<div style = "width:100px; height:100px; border:solid black 1px" onclick = "handleClick(event)"></div>
  <script>
    let div = document.getElementsByTagName('div')[0];

    function handleClick(event){
      handleMove(event);
    }

    function handleMove(event){
      console.info('Mousemove event has occurred');
    }
</script>

Обновление: я думал пройти handleMove без (), но запутался в Atom IDE (из-за бледного выделения), так что пусть Атом не сбивает вас с толку!

попробуйте поменять div.addEventListener('onmousemove', handleMove(event)); to div.addEventListener('mousemove', handleMove); как видно здесь

Pavlo 15.03.2018 22:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
1 724
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Looks like it ignores this part div.addEventListener('onmousemove', handleMove(event)); and executes handleMove(event); instead:

Да потому что это то, что вы написали;)

div.addEventListener('onmousemove', handleMove(event));

Вышеупомянутое выполняет функцию handleMove, передавая ей event.

Сравните это с фактическим созданием обработчика событий (без скобок после handleMove):

<div style = "width:100px; height:100px; border:solid black 1px" onclick = "handleClick(event)"></div>
<script>
    let div = document.getElementsByTagName('div')[0];

    function handleClick(event){
      console.info(`handleClick`);
      div.addEventListener('mousemove', handleMove);
    }

    function handleMove(event){
      console.info('Mousemove event has occurred');
    }
</script>

Также: событие - mousemove, а не onmousemove.

Спасибо @ Sébastien за быстрый и полезный ответ!

Kirill 15.03.2018 22:18

прослушиватель событий должен быть «mousemove», а не «onmousemove». что-то вроде этого:

<div style = "width:100px; height:100px; border:solid black 1px" onclick = "handleClick(event)"></div>
  <script>
    let div = document.getElementsByTagName('div')[0];

    function handleClick(event){
      div.addEventListener('mousemove', function(event) { handleMove(event) });
    }

    function handleMove(event){
      console.info('Mousemove event has occurred');
    }
  </script>

Если вы посмотрите на синтаксис addEventListener, который здесь document.addEventListener(event, function, useCapture) для параметра event, четко укажите, что (здесь)

Required. A String that specifies the name of the event.

Note: Do not use the "on" prefix. For example, use "click" instead of "onclick".

Так что замените onmousemove на mousemove

<div style = "width:100px; height:100px; border:solid black 1px" onclick = "handleClick(event)"></div>
  <script>
    let div = document.getElementsByTagName('div')[0];
    
    function handleClick(event){
      div.addEventListener('mousemove', handleMove);
    }

    function handleMove(event){
      console.info('Mousemove event has occurred');
    }
  </script>

Другие вопросы по теме