Добавить eventListener в IE JavaScript - PullRequest
1 голос
/ 16 марта 2012

Этот код хорошо работает, например, в 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 вместо этого.Как мне это сделать?Я бы предпочел сохранить код, который работает в других браузерах, и использовать только attachEvent в Internet Explorer.Как мне сделать этот кросс-браузер совместимым?

1 Ответ

7 голосов
/ 16 марта 2012

IE9 поддерживает 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 является глобальным со старыми IE.Вы можете написать об этом, если хотите.Вы бы просто заставили каждую функцию вызывать этот callback(), который будет вызывать предоставленный пользователем handler() с правильными аргументами.

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

Вы можете увлечься и попытаться нормализовать свойства на event, например target / srcElement, но тогда вам может потребоваться рассмотреть существующую библиотеку.

...