14

sto ottenendo il seguente errore in IE9:oggetto non supporta questa azione IE9 con CustomEvent inizializzazione

"oggetto non supporta questa azione".

ci sono varie domande su questo, ma il mio è specifico per il seguente codice:

var myEvent = new CustomEvent("additem"); 

Dalla mia comprensione, CustomEvent è supportato in IE9 come un comando di manipolazione del DOM. Funziona perfettamente in Chrome senza eccezioni.

Chiunque ha questo problema e sa come risolverlo? Grazie.

risposta

17

Gli eventi personalizzati Afaik non sono supportati in IE, solo nei normali browser. Io suggerisco di usare una libreria javascript che fornisce un browser implementazione indipendente come innesco di Jquery: http://api.jquery.com/trigger/

+1

che dire: http://www.kaizou.org/2010/03/generating -custom-javascript-events/ –

+1

Sembra che IE9 sia ora costruttore di customEvent http://msdn.microsoft.com/en-us/library/ie/ff975304%28v=vs.85%29.aspx vedere un esempio utilizzando createEvent funzione ma nessun costruttore. Sono d'accordo con Flunk per utilizzare al meglio una libreria se si desidera il supporto multi browser. – HMR

+9

@HMR ha ragione, ** gli eventi personalizzati sono supportati! **. Devi usare 'document.createEvent()' e 'CustomEvent :: initCustomEvent()' per ** IE 9 comptability **. Vedere la mia risposta qui: http://stackoverflow.com/a/19345563/603003 – ComFreek

17

È possibile utilizzare una funzione javascript per rilevare se il browser è IE11 o abbassare quindi applicare la prossima 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; 
    })(); 

Il polyfill dall'alto viene preso da MDN: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent

+1

questo polyfill non sembra rilevare quando degradare dalle implementazioni native – goofballLogic

+2

new CustomEvent non funziona neanche in IE 10/11. –

+0

Grazie, Alin! Ho modificato la mia risposta e l'ho corretta. –

6

Prova questo polyfill che non sostituisce un metodo CustomEvent nativo (e funzionale).

(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

Questo non ha funzionato per me in IE11. Invocare il nuovo CustomEvent ('test') ha effettivamente chiamato il metodo qui definito, facendo in modo che il polyfill non venga mai aggiunto. – anztenney

+0

Ah interessante .., forse prova a spostare il resto all'interno del blocco 'catch'? –

0

Il seguente polyfill non sarebbe replacce CustomEvent nativo(),
fonte parziale da: 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; 
})(); 
Problemi correlati