dimayakovlev.ru


Добавление и удаление обработчиков событий на чистом JavaScript, но, как в JQuery

Хочу поделиться примером простой реализации методов, аналогичных методам on и off из библиотеки JQuery, специально для тех, кто хочет работать с чистым JavaScript, но не готов сразу отказаться от сформировавшихся привычек.

Для начала следует вспомнить предназначение рассматриваемых методов JQuery:

  • on – используется для добавления обработчика события элемента;
  • off – используется для удаления обработчика события элемента.

Прочитать подробнее об использовании методов можно в официальной документации JQuery: on и off.

Отказываясь от использования JQuery и переходя на чистый JavaScript, вместо метода on следует использовать метод addEventListener, а вместо метода off – метод removeEventListener. Однако следующий код позволяет сохранить привычный каждому любителю JQuery синтаксис, не подключая саму библиотеку:

<script>
  var $ = document.querySelectorAll.bind(document);
  Element.prototype.on = Element.prototype.addEventListener;
  Element.prototype.off = Element.prototype.removeEventListener;
</script>

В приведённом коде, приятным дополнением к рассматриваемой теме является объявление переменной $, используя которую, можно обращаться к элементам DOM, сохраняя привычный синтаксис JQuery, что продемонстрировано в следующем примере.

<div>
  <button class="button-1">Кнопка 1</button>
  <button class="button-2">Кнопка 2</button>
</div>

<script>
  function clickButton1() {
    alert('Нажата Кнопка 1');
  }
  
  function clickButton2() {
    alert('Нажата Кнопка 2. Кнопка 1 больше не работает');
    $('.button-1')[0].off('click', clickButton1);
  }
            
  $('.button-1')[0].on('click', clickButton1);
  $('.button-2')[0].on('click', clickButton2);
</script>

Использование рассмотренной техники может найти применение на практике, но может рассматриваться и просто в качестве первоапрельского розыгрыша.