14

我在IE9中收到以下錯誤:對象不支持此操作IE9與CustomEvent初始化

「對象不支持此操作」。

有關於這個問題的不同,但我是專門爲下面的代碼:

var myEvent = new CustomEvent("additem"); 

從我的理解,在CustomEvent的IE9支持的DOM操作命令。這在Chrome中運行良好,沒有任何異常。

任何人都有這個問題,並知道如何解決它?謝謝。

回答

17

只有在普通瀏覽器中,IE不支持Afaik自定義事件。我建議使用,提供了一個獨立於瀏覽器的實現像jQuery的觸發JavaScript庫:http://api.jquery.com/trigger/

+1

怎麼樣:http://www.kaizou.org/2010/03/generating -custom-javascript-events/ –

+1

看起來像IE9現在具有customEvent的構造函數http://msdn.microsoft.com/en-us/library/ie/ff975304%28v=vs.85%29.aspx請參閱使用createEvent的示例函數但沒有構造函數。如果您需要多瀏覽器支持,我同意Flunk更好地使用圖書館。 – HMR

+9

@HMR是對的,支持**自定義事件!**。你必須使用'document.createEvent()'和'CustomEvent :: initCustomEvent()'來獲得** IE 9的兼容性**。看到我的答案在這裏:http://stackoverflow.com/a/19345563/603003 – ComFreek

17

您可以使用JavaScript函數來檢測,如果瀏覽器IE11或降低再申請下一填充工具:

(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

+1

此polyfill似乎無法檢測何時從本機實現中降級 – goofballLogic

+2

新的CustomEvent在IE 10/11中也不起作用。 –

+0

謝謝阿林!我編輯了我的答案並更正了它。 –

6

試試這個不能代替原生(和功能性)CustomEvent方法的polyfill。 MDN CustomEvent()

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

這在IE11中不適用於我。調用新的CustomEvent('test')實際上稱爲此處定義的方法,導致填充不會被添加。 – anztenney

+0

啊有趣..也許試着移動'catch'塊內的其餘部分? –

0

下填充工具不會從replacce本地自定義事件(),
的部分源

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