Цей код добре працює, наприклад, у Chrome, але не в Internet Explorer 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 вже скаржиться на addEventListenerрядок. Я вважаю, що мені потрібно замість цього використовувати attachEvent. Як це зробити? Я вважаю за краще зберегти код, який працює в інших браузерах, і використовувати лише APIEvent в Internet Explorer. Як зробити цей крос-браузер сумісним?
Відповіді:
7 для відповіді № 1IE9 робить підтримка addEventListener()
.
Ось як би працювала ваша існуюча функція attachEvent
(і старий on*
майно)
// 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;
}
}
Потім ви встановите подію завантаження вікна ...
AttachEvent(window, "load", function() {
// ...
});
Не забувай, що event
є глобальним зі старими ІЕ. Ви можете сценарій навколо цього, якщо хочете. Ви просто мали б кожну функцію викликати це callback()
який буде надалі викликати надану користувачем handler()
з правильними аргументами.
var callback = function(e) {
e = e || window.event;
handler.call(element, e);
};
Ви можете захопитися і спробувати нормалізувати властивості event
, як от target
/srcElement
, але тоді ви можете розглянути наявну бібліотеку.