封装兼容低版本浏览器的事件监听函数

东明兄 2018-06-20
0条评论 10,170 次浏览
东明兄 2018-06-200条评论 10,170 次浏览

addEventListener——兼容:firefox、chrome、IE、safari、opera;不兼容IE7、IE8;
attachEvent——兼容:IE7、IE8;不兼容firefox、chrome、IE9、IE10、IE11、safari、opera;

addEventListener 解除事件监听: removeEventListener;
attachEvent 解除事件监听:detachEvent;

attachEvent 回调函数中的this指向的不是触发事件的dom,指向的是window.

function addCompatibilityEventListener(element, eventType, handler) {
        if (element.addEventListener) {
            element.addEventListener(eventType, handler, false)
        } else if (element.attachEvent) {
            element.attachEvent("on" + eventType, function () {
                handler.call(element)//因为attachEvent 中的 this 指向window
            })
        } else {
            element['on' + eventType] = handler;
        }

    }

例子:

<button class="click">click me</button>
 function test() {
        console.log(this)
    }


    addCompatibilityEventListener(document.getElementsByClassName("click")[0], "click", test);

相关注意点:在IE/Opera中,是window.event,而在Firefox/chrome中,是event,而事件的对象,在IE中是window.event.srcElement,其他浏览器是event.target

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注