我不能在IE中使用Javascript来发起个人事件。在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);
}
但是当尝试在IE中执行document.fireEvent('eventoPersonal', evento);
时,它不起作用。如何在IE中触发 NO自定义事件?
在Internet Explorer中,我在执行document.fireEvent('eventoPersonal', evento);
答案 0 :(得分:39)
Dean Edwards描述了如何在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++;
};
}
答案 1 :(得分:2)
我认为答案是 - 在IE中你不能触发不在此列表中的事件:
根据我的收集,框架存储“自定义”事件名称的注册表,您必须使用其特定于实现的触发器和句柄函数来进行自定义事件。例如,prototype使用ondatavailable
事件在幕后传递自定义事件。
答案 2 :(得分:1)
您可能需要考虑使用库来抽象它。两个原型jquery都会为你处理这个问题。 Jquery特别擅长于使用非常简单的代码创建事件。
Jquery的文档可在此处获得: http://docs.jquery.com/Events
答案 3 :(得分:1)
在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) {}
});
希望这有助于某人。
答案 4 :(得分:0)
当我阅读关于createEventObject方法的相关MSDN文章页面时,它看起来好像不用于创建自定义事件 - 它用于创建可以传递给现有事件的自定义对象。
<强>描述强>: 使用event方法生成fireEvent对象以传递事件上下文信息。
http://msdn.microsoft.com/en-us/library/ms536390%28VS.85%29.aspx
更新:您收到“无效参数”错误,因为“eventoPersonal”不是可接受的触发事件。
答案 5 :(得分:0)
是的,指的是@Don Albrecht,您可以在http://api.jquery.com/trigger/上更多地使用jquery trigger()方法