2015-03-02 12 views
15

Czy to ja? Czy to mój IE? lub dlaczego jest ten kod nie działa na IE 11:MouseEvent nie działa w Internet Explorerze

var clicker = new MouseEvent("click", { 
    'bubbles': true, 
    'cancelable': true, 
    'view': window, 
    'detail': 0, 
    'screenX': 0, 
    'screenY': 0, 
    'clientX': 0, 
    'clientY': 0, 
    'ctrlKey': false, 
    'altKey': false, 
    'shiftKey': false, 
    'metaKey': false, 
    'button': 0, 
    'relatedTarget': null 
}); 

otrzymuję „Obiekt nie obsługuje tej akcji” na konsoli (F12). Musiałem wymyślić obejście, ale po prostu nie rozumiem, dlaczego poprzedni kod nie działa (przy okazji, poprzedni kod pochodzi stąd: https://msdn.microsoft.com/en-us/library/ie/dn905219(v=vs.85).aspx (Tworzenie i uruchamianie zdarzeń syntetycznych) Obejście:

if (typeof MouseEvent !== 'function') { 
    (function(){ 
     var _MouseEvent = window.MouseEvent; 
     window.MouseEvent = function (type, dict){ 
      dict = dict | {}; 
      var event = document.createEvent('MouseEvents'); 
      event.initMouseEvent(
        type, 
        (typeof dict.bubbles == 'undefined') ? true : !!dict.bubbles, 
        (typeof dict.cancelable == 'undefined') ? false : !!dict.cancelable, 
        dict.view || window, 
        dict.detail | 0, 
        dict.screenX | 0, 
        dict.screenY | 0, 
        dict.clientX | 0, 
        dict.clientY | 0, 
        !!dict.ctrlKey, 
        !!dict.altKey, 
        !!dict.shiftKey, 
        !!dict.metaKey, 
        dict.button | 0, 
        dict.relatedTarget || null 
      ); 
      return event; 
     } 
    })(); 
} 

Transakcja jest to, że chcą migrować przestarzałej CreateEvent/initXXXXEvent do nowej postaci (var event = new XXXXEvent (...)), w miarę możliwości, a nie polegać na przestarzałych metod.

Odpowiedz

10

dokumentacji MSDN z podanego linku wynika, że ​​nowa składnia wzorca konstruktora zdarzeń DOM L4:

Dotyczy później przeglądarki technicznej Internet Explorer dla systemu Windows 10 i wersji .

która jest inną wersją IE z tego, z czego korzystasz. Oczekuje się, że IE11 nie obsługuje tej funkcji.

+3

Ah! Mój mózg chciał przeczytać IE 10 ... zupełnie inaczej niż IE na Windows 10. Dziękuję za wskazanie problemu. –

+7

Oto sposób obejścia: http://www.codeproject.com/Tips/893254/JavaScript- Triggering-Event-Manaally-in-Internet-E – geraldo

3

Istnieje polyfill, aby działało w IE.

wyjątkiem, że blok w tym kodzie try catch musi wyglądać następująco:

try { 
    new CustomEvent('test'); 
    return false; // No need to polyfill 
} catch (e) { 
    // Need to polyfill - fall through 
} 

złożyłam tej korekty do swojej stronie internetowej.

Powiązane problemy