Я не могу запустить персональные события с помощью 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);
Вы можете рассмотреть возможность использования библиотеки для абстрактации. Оба прототипа JQuery будут справиться с этим для вас. JQuery особенно хорошо, чтобы вам создать событие с очень простым кодом.
Документация jQuery доступна здесь: http://docs.jquery.com/events
Когда я прочитал соответствующую страницу статьи MSDN о методе createEventObject, мне показалось, что он не используется для создания настраиваемого события - он используется для создания настраиваемых объектов, которые могут быть переданы в уже существующие события.
Описание : Создает объект event для передачи информации о контексте события при использовании метода fireEvent .
http://msdn.microsoft.com/en-us/library/ms536390%28VS.85%29.aspx
Обновление : вы получаете сообщение об ошибке «недопустимые аргументы», потому что «eventoPersonal» неприемлемое событие для пожара.
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++;
};
}
Думаю, ответ в том, что в IE вы не можете вызывать события, которых нет в этом списке:
Насколько я понял, фреймворки хранят реестр имен "пользовательских" событий, и вы должны использовать их специфические trigger и handle функции для пользовательских событий. Например, prototype использует событие ondatavailable
для передачи своих пользовательских событий за кулисами.