IE中不支持CustomEvent()
构造函数。至少可以使它与IE11兼容吗?它正在与Chrome和Firefox等其他浏览器一起使用。
例如: -
var SpecialEvent = new CustomEvent(
"SpecialMessage",
{
detail:
{
message: "Hello There",
time: new Date()
},
bubbles: true,
cancelable: true
});
答案 0 :(得分:1)
MDN为IE> = 9提供了polyfill。见下文 https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent
(function () {
if ( typeof window.CustomEvent === "function" ) return false;
function CustomEvent ( event, params ) {
params = params || { bubbles: false, cancelable: false, detail: undefined };
var evt = document.createEvent( 'CustomEvent' );
evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
return evt;
}
CustomEvent.prototype = window.Event.prototype;
window.CustomEvent = CustomEvent;
})();
答案 1 :(得分:0)
这应该适用于IE9 +
var SpecialEvent = document.createEvent("CustomEvent");
SpecialEvent.initCustomEvent('SpecialMessage', false, false, {
detail: {
message: "Hello There",
time: new Date()
},
bubbles: true,
cancelable: true
});
从这里开始.. Why aren't my parameters getting passed through to a dispatched event?
答案 2 :(得分:0)
使用更少的时间和精力,通过切换到jQuery事件,而不是使用一些特殊的原型酱来让IE工作,从而节省自己未来的艰辛。 jQuery事件具有更好的实现,并且与IE兼容。
[除非您在帧中触发事件,否则您需要原型并使用传统的window.dispatchEvent(evt)
]
旧方式:
var SpecialEvent = new CustomEvent(
"SpecialMessage",
{
detail:
{
message: "Hello There",
time: new Date()
},
bubbles: true,
cancelable: true
});
新方式:
$(window).trigger("SpecialMessage", ["Hello There", new Date()]);
并抓住那个事件:
$(window).on("SpecialMessage",function(e, arg1, arg2){
console.log(arg1); // Hello There
console.log(arg2); // 2018-04-18...
});