Как я создаю пользовательский класс событий в JavaScript?

Как я создаю пользовательский класс событий, подобный ActionScript? Под чем я подразумеваю, который является классом, который я могу использовать, чтобы исчерпать мои собственные события, отправить необходимые данные.

Я не хочу пользоваться сторонними библиотеками как YUI или jQuery, чтобы сделать это. Моя цель состоит в том, чтобы быть в состоянии отправить событие, которое похоже на это.

document.addEventListener("customEvent", eventHandler, false);

function eventHandler(e){
    alert(e.para1);
}

document.dispatchEvent(new CustomEvent("customEvent", para1, para2));

Никакие сторонние решения библиотеки.

28
задан Josua Pedersen 13 January 2010 в 19:07
поделиться

1 ответ

На самом деле не так сложно - не так много определений событий, только три версии. Первый - The Corect One ( addeventListener ), то есть способ IE ( Attavent ), а затем есть способ совместимости для более старого браузера ( Element.onevent = функция )

Так что полное решение для обработки событий будет выглядеть что-то подобное:

setEvent = function(element, eventName, handler){
  if('addEventListener' in element){
    //W3
    element.addEventListener(eventName,handler,false);
  }else if('attachEvent' in elm){
    //IE
    elm.attachEvent('on'+eventName,handler)
  }else{
    // compatibility
    elm['on'+eventName] = handler;
  }
}

и очистить события:

clearEvent = function(element, eventName, handler){
  if('removeEventListener' in element){
    //W3
    element.removeEventListener(eventName,handler,false);
  }else if('detachEvent' in elm){
    //IE
    elm.detachEvent('on'+eventName,handler)
  }else{
    // compatibility
    elm['on'+eventName] = null;
  }
}

и пример:

setEvent(document, "click", function(){alert('hello world!');});
clearEvent(document, "click", function(){alert('hello world!');});

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

-3
ответ дан 28 November 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: