Самый простой и надежный способ сделать это - использовать библиотеку, чтобы сделать это за вас, например Прототип , jQuery , Закрытие и т. Д. Таким образом, вы получаете выгоду от того, что другие люди находят и сообщают / исправляют ошибки, а не делают все это самостоятельно. : -)
Но:
DOM-элементы также имеют addEventListener
(и attachEvent
в IE), поэтому для этого довольно просто создать общую функцию:
function hook(obj, event, handler) {
if (obj.attachEvent) {
obj.attachEvent("on" + event, handler);
}
else if (obj.addEventListener) {
obj.addEventListener(event, handler);
}
else {
// Fail, probably
}
}
(Обратите внимание, что вариант IE использует "on" [например, "onclick"], стандарт не ["click"].)
Немного эффективнее протестировать один раз , а затем использовать то, что имеет браузер:
var hook = (function() {
var elm = document.createElement('div');
if (elm.attachEvent)
{
return hookWithAttachEvent;
}
if (elm.addEventListener)
{
return hookWithAddEventListener;
}
return hookFail;
function hookWithAttachEvent(obj, event, handler) {
obj.attachEvent("on" + event, handler);
return obj;
}
function hookWithAddEventListener(obj, event, handler) {
obj.addEventListener(event, handler);
return obj;
}
function hookFail() {
throw "Don't know how to hook events on this platform.";
}
})();
Один раз определяет, какой вариант следует использовать, и возвращает функцию, использующую этот вариант, которая затем будет вызываться непосредственно при использовании hook
.