Как пожарить личное событие в 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/