15

我在 IE9 中收到以下错误:

“对象不支持此操作”。

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

 var myEvent = new CustomEvent("additem");

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

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

4

4 回答 4

20

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

于 2013-01-16T12:44:26.160 回答
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

于 2014-04-08T19:22:03.317 回答
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;
})();
于 2015-11-13T00:03:43.067 回答
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;
})();
于 2015-11-19T04:11:16.697 回答