Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object doesn't support this action IE9 with CustomEvent Initialization

I am getting the following error in IE9:

"Object doesn't support this action".

There are various question about this, but mine is specifically for the following code:

 var myEvent = new CustomEvent("additem");

From my understanding, CustomEvent is supported in IE9 as a DOM manipulation command. This works fine in Chrome without any exception.

Anyone has this problem and know how to solve it? Thanks.

like image 880
Idan Shechter Avatar asked Jan 16 '13 12:01

Idan Shechter


4 Answers

Afaik custom events are not supported in IE, only in normal browsers. I suggest using a javascript library that provides a browser independent implementation like Jquery's trigger: http://api.jquery.com/trigger/

like image 159
Flunk Avatar answered Oct 29 '22 08:10

Flunk


You can use a javascript function to detect if the browser is IE11 or lower then apply the next 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;
    })();

The polyfill from above is taken from MDN: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent

like image 45
Florin Dobre Avatar answered Oct 29 '22 08:10

Florin Dobre


Try this polyfill which doesn't replace a native (and functional) CustomEvent method.

(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;
})();
like image 25
Scott Jungwirth Avatar answered Oct 29 '22 07:10

Scott Jungwirth


The following polyfill would not replacce native CustomEvent(),
Partial source from: 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;
})();
like image 36
Rex Hsu Avatar answered Oct 29 '22 07:10

Rex Hsu