Как украсить обработчик событий узла DOM? - PullRequest
0 голосов
/ 10 июня 2010

Как можно декорировать узел DOM, чтобы добавить обработчик событий, но в новом обработчике вы можете вызвать предыдущий обработчик?

Ответы [ 2 ]

0 голосов
/ 10 июня 2010

Я предполагаю, что вы связываете события следующим образом element.onclick = function () {};.

Да, вы можете создать функцию, которая обернет предыдущие обработчики событий и выполнит их последовательно, например,

function addEvent(el, event, handler) {
  var oldEvent = el['on'+event];
  if (typeof oldEvent != 'function') {
    el['on'+event] = handler;
  } else {
    el['on'+event] = function() {
      oldEvent();
      handler();
    }
  }
}

var el = document.getElementById('el');
addEvent(el, 'click', function () { alert('1'); });
addEvent(el, 'click', function () { alert('2'); });

Проверьте приведенный выше пример здесь .

0 голосов
/ 10 июня 2010

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

function addClickHandler(nodeId, handler) {
  var node = document.getElementById(nodeId), old = node.onclick;
  node.onclick = function() {
    handler(old);
  }
}

Ваша функция-обработчик проверит свой параметр, чтобы определить, не является ли он нулевым.

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

...