Как пожарить личное событие в Javascript

Я не могу запускать личные события, используя Javascript в IE. В Firefox отлично работает.

Мой код:

var evento; 
if(document.createEventObject)  
{  
   evento = document.createEventObject();  
   document.fireEvent('eventoPersonal', evento);     
}  
//FF  
else  
{  
    evento = document.createEvent('Events');  
    evento.initEvent('eventoPersonal',true,false);  
    document.dispatchEvent(evento);  
}

Но при попытке выполнить document.fireEvent('eventoPersonal', evento); в IE это не сработает. Как я могу запустить НЕТ пользовательских событий в IE?

В Internet Explorer я получаю сообщение об ошибке: "Недопустимые аргументы" в строке, где выполняется document.fireEvent('eventoPersonal', evento);

Ответ 1

Вы можете захотеть использовать библиотеку для абстрагирования этого. Оба прототипа jquery справятся с этим для вас. JQuery особенно хорош, позволяя создать событие с очень простым кодом.

Документация JQuery доступна здесь: http://docs.jquery.com/Events

Ответ 2

Дин Эдвард описывает, как запускать события cutsom в IE

http://dean.edwards.name/weblog/2009/03/callbacks-vs-events/

Его рядом с нижней частью статьи

var currentHandler;

if (document.addEventListener) {

  // We've seen this code already

} else if (document.attachEvent) { // MSIE

  document.documentElement.fakeEvents = 0; // an expando property

  document.documentElement.attachEvent("onpropertychange", function(event) {
    if (event.propertyName == "fakeEvents") {
      // execute the callback
      currentHandler();
    }
  });

  dispatchFakeEvent = function(handler) {
    // fire the propertychange event
    document.documentElement.fakeEvents++;
  };
}

Ответ 3

Я думаю, что ответ - в IE вы не можете запускать события, которые не входят в этот список:

MSDN - события DHTML

Из того, что я могу собрать, фреймворки хранят реестр имен "пользовательских" событий, и вы должны использовать их специфичные для реализации триггер и функции обработки для пользовательских событий. Например, прототип использует событие ondatavailable для передачи своих пользовательских событий за кулисами.

Ответ 4

В IE11 document.dispatchEvent все еще не работает, но теперь attachEvent тоже отсутствует, поэтому другое решение не будет работать. Однако я придумал еще один уродливый.:) Он включает в себя замену метода addEventListener и продолжается следующим образом:

var oldEventListener = document.addEventListener;

document.addEventListener = function (event, func, capture) {
    if (event == "MyPreciousCustomEvent") {
        document.MyPreciousCustomEvent = func;
    }

    oldEventListener.call(document, event, func, capture);
};

...

$(function () {
    try {
        document.MyPreciousCustomEvent("MyPreciousCustomEvent", {});
    } catch (e) {}
});

Надеюсь, это поможет кому-то.

Ответ 5

Когда я прочитал соответствующую страницу статьи MSDN по методу createEventObject, она выглядит так, как будто она не используется для создания настраиваемого события - она ​​используется для создания настраиваемых объектов, которые могут быть переданы уже существующим событиям.

Описание: Создает объект событие для передачи информации о контексте события, когда вы используете fireEvent.

http://msdn.microsoft.com/en-us/library/ms536390%28VS.85%29.aspx

Обновить. Вы получаете ошибку "недопустимые аргументы", потому что "eventoPersonal" не является допустимым событием для запуска.

Ответ 6

Да, ссылаясь на @Don Albrecht, вы можете использовать метод jquery trigger() больше на http://api.jquery.com/trigger/