美文网首页Web前端之路
addEventListener和attachEvent方法中的

addEventListener和attachEvent方法中的

作者: 我是何宝荣呀 | 来源:发表于2019-09-25 11:26 被阅读0次

    addEventListener和attachEvent绑定事件的兼容

    //绑定事件的兼容
        function addEventListener(element,type,fn) {
            if(element.addEventListener){
                element.addEventListener(type,fn,false);
            } else if(element.attachEvent){
                element.attachEvent("on"+type,fn);
            } else {
                element["on"+type]=fn;
            }
        }
    

    其中addEventListener和attachEvent方法当中的this指向不同,addEventListener的this指向是调用对象的本身,而attachEvent则是window

    在这里引入两个属性“e.target和e.srcElement”

    target定义:
    target 属性规定哪个 DOM 元素触发了该事件。
    target 事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素、文档或窗口。
    event.srcElement 在ie 下从字面上可以看出来有以下关键字:事件.源(它的意思就是:当前事件的源),可以捕获当前事件作用的对象,这两个属性的作用是一样的,类似于this,只不过ie下支持e.srcElement,而谷歌支持e.target

    下面是e.target和e.srcElement的兼容调式

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    
        <input type="button" value="按钮" onclick="test(event)">
    
        <script>
            function test(e){
                var target = e.srcElement ? e.srcElement : e.target;
                console.log(target);
            }
        </script>
    </body>
    </html>
    

    所以要改变addEventListener和attachEvent方法中的this的指向的话,则要通过这两个属性去改变!


    image.png
    btn.addEventListener("click",function (e) {
            console.log(this);//指向btn`
            console.log(e.target);//btn
        },false);
    
        btn.attachEvent('onclick',function(e){
            console.log(this);//指向window
            console.log(e.srcElement);//btn
        });
    

    这样就可以解决attachEvent方法中this的指向问题

    相关文章

      网友评论

        本文标题:addEventListener和attachEvent方法中的

        本文链接:https://www.haomeiwen.com/subject/xapeyctx.html