Подтвердить что ты не робот

Какая разница между обработчиками событий и слушателем?

В чем разница между обработчиками событий и прослушивателями событий в JavaScript? Они выполняют функцию, когда появляется событие. Я действительно не понимаю, когда использовать обработчики событий и когда использовать прослушиватели событий.

4b9b3361

Ответ 1

Нет никакой разницы; это просто другая терминология для одного и того же.

Существуют различные способы связывания функций с элементами DOM для обработки событий, что и все. Различия возникли снова, когда стандарты были в потоке (или просто потому, что разработчики были hornery или трудными), но в конечном итоге механизмы по существу одинаковы.

Если вы смущены тем, какую регистрацию обработчика событий использовать, вы можете:

  • Узнайте больше о теме и выберите подход к использованию, возможно, в браузере по-браузеру;
  • Выберите один из популярных фреймворков JavaScript и используйте его механизм для прикрепления обработчиков.

Ответ 2

Обработчик и слушатель являются одними и теми же - просто синонимы для функции, которая будет обрабатывать событие. "Обработчик", вероятно, является более приемлемым термином и, безусловно, более семантически корректен для меня. Термин "слушатель" выводится из кода, используемого для добавления события к элементу:

element.addEventListener('click', function() { /* do stuff here*/ }, false);

Вы могли бы, однако, получить действительно nitpicky и разбить два на отдельные значения. Если вы так склонны, "обработчик" может быть термином для функции, которая будет обрабатывать событие при добавлении "слушателя", таким образом, у вас может быть несколько "слушателей", в которых используется один "обработчик". Рассмотрим:

// handler is synonymous with function 
function someFunction(e) {
  if (typeof e == 'undefined')
   alert('called as a function');
  else
   alert('called as a handler');
}


// use someFunction as a handler for a 
// click event on element1 -- add a "listener"
element.addEventListener('click', someFunction, false);
// use an anonymous function as a handler for a 
// click event on element1 -- add another "listener"
element.addEventListener('click', function () { alert('anonymoose'); }, false);


// use someFunction as a handler for a 
// click event on element2 -- add a "listener"
element2.addEventListener('click', someFunction, false);

// call someFunction right now
someFunction();

Итак, в приведенном выше коде у меня есть 2 "обработчика" (someFunction и анонимная функция) и 3 "прослушивателя".

Опять же, это все семантика - для всех практических целей термины слушатель и обработчик используются взаимозаменяемо. Если необходимо провести различие, слушатель является подпиской на событие, которое вызовет вызов обработчику (который является функцией).

Удалить как грязь?

Ответ 3

Этот сайт(на который, как ни странно, есть циклическое упоминание здесь одним из комментариев) утверждает иначе, что люди ответили здесь (заявляя, что они одинаковы); вставить один из ответов:

Одно из отличий состоит в том, что если вы добавите два обработчика событий для одного и того же нажатия кнопки, второй обработчик события перезапишет первое, и сработает только это событие. например:

document.querySelector('.btn').onclick = function() {
  console.log('Hello ');
};

document.querySelector('.btn').onclick = function() {
  console.log('World!');
};

// This logs "World!" out to the console.

Но если вместо этого вы используете addEventListener, то оба триггера запустятся.

document.querySelector('.btn').addEventListener('click', function() {
  console.log('Hello ');
});

document.querySelector('.btn').addEventListener('click', function() {
  console.log('World!');
});

// This logs "Hello" and "World!" out to the console.

Ответ 4

Я нахожу это объяснение особенно практическим:

Обработчики событий состоят из прослушивателя событий и функции обратного вызова. Прослушиватель событий указывает тип события, которое будет обнаружено. Функция обратного вызова выполняется, когда происходит событие. Все вместе - это обработчик событий.