Как запустить персональное событие в 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);

10
задан matias albala 8 January 2010 в 16:18
поделиться

4 ответа

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

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

1
ответ дан 3 December 2019 в 13:40
поделиться

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

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

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

Обновление : вы получаете сообщение об ошибке «недопустимые аргументы», потому что «eventoPersonal» неприемлемое событие для пожара.

0
ответ дан 3 December 2019 в 13:40
поделиться

Dean Edward's описывает, как запускать 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++;
  };
}
39
ответ дан 3 December 2019 в 13:40
поделиться

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

MSDN - DHTML Events

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

2
ответ дан 3 December 2019 в 13:40
поделиться
Другие вопросы по тегам:

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