所有这些都发生在IE8身上。
由于脚本导入命令,在加载需要触发自定义事件的 JQuery之前,我将执行一些代码。
当我确信JQuery将被加载时,这个事件稍后将在另一段代码中被捕获。所以我想用JQuery来收集这个事件。
我看到了以前问过的问题:如何在IE8中触发自定义javascript事件?并应用了答案,这是有效的,但是当我试图通过JQuery获取事件时,什么都不会发生。
以下是我尝试过的:
function Event() {}
Event.listen = function(eventName, callback) {
if (document.addEventListener) {
document.addEventListener(eventName, callback, false);
} else {
document.documentElement.attachEvent('onpropertychange', function(e) {
if (e.propertyName == eventName) {
callback();
}
});
}
};
Event.trigger = function(eventName) {
if (document.createEvent) {
var event = document.createEvent('Event');
event.initEvent(eventName, true, true);
document.dispatchEvent(event);
} else {
document.documentElement[eventName] ++;
}
};
Event.listen('myevent', function() {
document.getElementById('mydiv-jquery').innerText = "myevent jquery";
});
$(document).on('myevent', function() {
document.getElementById('mydiv-vanilla').innerText = "myevent vanilla";
});
Event.trigger('myevent');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="mydiv-jquery">Nothing</div>
<div id="mydiv-vanilla">Nothing</div>
PS: --这个片段在IE中似乎不能正常工作。这是一个应该能工作的小提琴。
发布于 2014-11-07 12:29:55
这段代码有一些问题。
window.Event
的情况下对其进行隐藏;这可能会给其他脚本带来问题。this
侦听器调用回调时,不保留onpropertychange
绑定。您应该将回调应用于文档,而不是直接调用它,这样行为将尽可能接近addEventListener
。document.documentElement[eventName]
未定义时,尝试增加它。第一个调用将值更改为NaN
,因此onpropertychange
应该将其捡起,但在随后的调用中,它将保持为NaN
。.on()
识别您的Event.listen
函数,因此很自然地,Event.listen
中的代码永远不会从带有.on()
的侦听器中执行。你试过使用Andrea的CustomEvent shim吗?
https://stackoverflow.com/questions/26808792
复制