Сегодня рассмотрим стандартную модель событий в языке JavaScript .

Стандартная модель событий в языке JavaScript.

Сегодня рассмотрим стандартную модель событий в языке JavaScript.

Думаю, многие знают способ задания события через атрибут on + название события.

<a href="#">Нажми!</a>

Но этот способ является далеко не самым лучшим, т.к. html - это разметка и там не следует писать скриптов в атрибутах. Для того, чтобы повесить какое-нибудь событие на элемент, есть метод addEventListener(). Этот метод принимает три параметра:

  • первый - название события
  • второй - функция, которая должна сработать на этом событии
  • третий - этап события. Если true(по-умолчанию), то событие будет срабатывать на этапе захвата, а если false - на этапе всплытия. Советую вам всегда ставить третим параметром false.
<html>
<head>
  <title>addEventListener</title>
  <meta charset="utf-8">
</head>
<body>
  <a href="yandex.ru" id="link">Нажми!</a>
  <script>
   var link = document.getElementById('link');
   link.addEventListener('click', function(e) {
    e.preventDefault();
    alert('Был произведён клик по ссылке!');
   }, false);
   link.addEventListener('click', function(e) {
    e.preventDefault();
    document.getElementsByTagName('body')[0].style.background=green;
   }, false);
  </script>
</body>
</html>

Как видно из примера, ещё одним плюсом данного метода является то, что мы можем повесить сразу несколько действий на одно и то же событие! В нашем примере сначала выведится alert, а затем поменяется фон body на зелёный цвет. Также заметьте, что в функцию-обработчик будет передан объект события. Назвать вы можете его как угодно, но обычно называют просто e. У него есть много всяких свойств и методов, которые вы можете посмотреть в справочнике, а в нашем примере я использовал метод preventDefault(), который отменяет стандартное поведение и, следовательно, кликая по ссылке, мы никуда не перейдём.

В конце стоит сказать, что бывают случаи, когда нужно повесить событие, а потом его где-то удалить. За удаление события отвечает метод removeEventListener(), который принимает такие же параметры, как и addEventListener().

<html>
<head>
  <title>RemoveEventListener</title>
  <meta charset="utf-8">
</head>
<body>
  <a href="yandex.ru" id="link">Нажми!</a>
  <script>
   function myfunc() {
    alert('Событие, которое не сработает.');
   }
   var link = document.getElementById('link');
   link.addEventListener('click', myfunc, false);
   link.removeEventListener('click', myfunc, false);
  </script>
</body>
</html>

Здесь ничего не произойдёт, т.к. мы сначала повесили событие, а потом сразу его удалили.