对象不支持使用CustomEvent Initialization的此操作IE9

时间:2013-01-16 12:33:44

标签: javascript internet-explorer javascript-events custom-event

我在IE9中收到以下错误:

“对象不支持此操作”。

关于这个有各种各样的问题,但我的具体是针对以下代码:

 var myEvent = new CustomEvent("additem");

据我了解,IE9支持CustomEvent作为DOM操作命令。这在Chrome中运行良好,没有任何例外。

任何人都有这个问题,知道如何解决它?感谢。

4 个答案:

答案 0 :(得分:20)

IE中不支持Afaik自定义事件,仅适用于普通浏览器。我建议使用一个javascript库,它提供一个独立于浏览器的实现,如Jquery的触发器:http://api.jquery.com/trigger/

答案 1 :(得分:18)

您可以使用javascript函数来检测浏览器是IE11还是更低,然后应用下一个polyfill:

    (function () {
      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;
    })();

上面的polyfill来自MDN: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent

答案 2 :(得分:6)

尝试使用不能替换原生(和功能)CustomEvent方法的polyfill。

(function () {
  try {
    new CustomEvent('test');
    return;
  } catch(e) {
    // ignore this error and continue below
  }

  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;
})();

答案 3 :(得分:1)

以下polyfill不会替换本机CustomEvent(),
部分来源:MDN CustomEvent()

(function () {

  if (typeof CustomEvent === 'function') { return; }

  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;
})();