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 № 1IE9 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ę.