在IE中,CustomEvent()构造函数不支持

时间:2015-04-10 20:06:22

标签: javascript html

IE中不支持CustomEvent()构造函数。至少可以使它与IE11兼容吗?它正在与Chrome和Firefox等其他浏览器一起使用。

例如: -

var SpecialEvent = new CustomEvent(
  "SpecialMessage",
  {
   detail:
   {
     message: "Hello There",
     time: new Date()
   },
   bubbles: true,
   cancelable: true
  });

3 个答案:

答案 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...
});