/ / Dodaj eventListener w IE javascript - javascript, przeglądarka internetowa, zdarzenia, detektor

Dodaj eventListener w IE javascript - javascript, internet-explorer, events, listener

Ten kod działa dobrze na przykład w Chrome, ale nie w Internet Explorerze 8/9.

/* sitepoint.com/javascript-this-event-handlers */
function AttachEvent(element, type, handler){if (element.addEventListener){element.addEventListener(type, handler, false);}else{element.attachEvent("on"+type, handler);}}

window.addEventListener("load", function() {

//do some stuff

AttachEvent(id, "click", function_name);

}, false);

IE już narzeka na addEventListenerlinia. Uważam, że zamiast tego muszę użyć attachEvent. Jak mam to zrobic? Wolałbym zachować kod działający w innych przeglądarkach i używać tylko attachEvent w Internet Explorerze. Jak mogę uzyskać zgodność z tą przeglądarką?

Odpowiedzi:

7 dla odpowiedzi № 1

IE9 robi wsparcie addEventListener().

Oto jak działałaby twoja istniejąca funkcja attachEvent (i stary on* własność).

// logic to attach the event correctly in IE9
function AttachEvent(element, type, handler) {
if (element.addEventListener) {
element.addEventListener(type, handler, false);
}else if (element.attachEvent) {
element.attachEvent("on" + type, handler)
} else {
element["on" + type] = handler;
}
}

Następnie ustaw zdarzenie ładowania okna ...

AttachEvent(window, "load", function() {
// ...
});

Nie zapominaj, że event jest globalny ze starszymi IE. Możesz to zrobić, jeśli chcesz. Po prostu każda funkcja wywołuje to callback() które następnie wywołałoby dostarczone przez użytkownika handler() z poprawnymi argumentami.

var callback = function(e) {
e = e || window.event;
handler.call(element, e);
};

Możesz dać się ponieść emocjom i spróbować normalizować właściwości event, Jak na przykład target/srcElement, ale możesz rozważyć istniejącą bibliotekę.