[JS学习笔记]浅谈Javascript事件模型

DOM0级事件模型

element.on[type] = function(){}
兼容性:全部支持
 
lay1
lay2
lay3
  • e.target:直接触发事件的元素[IE8及以下不支持taget属性,使用e.srcElement代替]
  • e.srcElement:直接触发事件的元素[FF不支持srcElement属性,使用e.target代替]
  • e.currentTarget:绑定事件的元素[IE8及以下不支持currentTarget属性,使用this代替]
  • this:同e.currentTarget[所有浏览器通用]

DOM2级事件模型

attachEvent
兼容性:IE5-IE10支持,IE11不支持,ff不支持
 
lay1
lay2
lay3
  • 对于支持的浏览器
  • e.target:不支持该属性
  • e.srcElement:直接触发事件的元素
  • e.currentTarget:不支持该属性
  • this:始终指向window,可以使用call/apply改变this指向
    element.attachEvent("on"+type,function(){ handler.apply(element,arguments); })

DOM2级事件模型

addEventListener
兼容性:IE5-IE8不支持,IE9-IE11支持,ff支持
 
lay1
lay2
lay3
  • 对于支持的浏览器
  • e.target:直接触发事件的元素
  • e.srcElement:不支持该属性
  • e.currentTarget:绑定事件的元素
  • this:同e.currentTarget
 $(function(){           //dom0级事件绑定
            var eleArr_d1 = $.makeArray($(".demo1").find(".layer1,.layer2,.layer3"));
            $.each(eleArr_d1, function (i, o) {
                o.onclick = fn0;
            });

            function fn0(e) {
                e = e || window.event;
                console.log("e.target=", getName(e.target));
                console.log("e.srcElement=", getName(e.srcElement));
                console.log("e.currentTarget=", getName(e.currentTarget));
                console.log("this=", getName(this));
                console.log("========================================================");
            }

            //dom2级事件绑定[IE]
            var eleArr_d2 = $.makeArray($(".demo2").find(".layer1,.layer2,.layer3"));
            if (document.attachEvent) {
                $.each(eleArr_d2, function(i, o) {
                    o.attachEvent("onclick", function() { fn2_ie.apply(o,arguments); });//改变this指向
                });
            } else {
                $(".demo2").find(".error").text("当前浏览器不支持attachEvent").show().css({ display: "inline-block" });
            }


            function fn2_ie(e) {
                e = e || window.event;
                console.log("e.target=", getName(e.target));
                console.log("e.srcElement=", getName(e.srcElement));
                console.log("e.currentTarget=", getName(e.currentTarget));
                console.log("this=", getName(this));
                console.log("========================================================");
            }


            //dom2级事件绑定[FF]
            var eleArr_d3 = $.makeArray($(".demo3").find(".layer1,.layer2,.layer3"));
            if (document.addEventListener) {
                $.each(eleArr_d3, function(i, o) {
                    if (o.addEventListener) o.addEventListener("click", fn3_ff, false);
                });
            } else {
                $(".demo3").find(".error").text("当前浏览器不支持addEventListener").css({display:"inline-block"});
            }

            function fn3_ff(e) {
                e = e || window.event;
                console.log("e.target=", getName(e.target));
                console.log("e.srcElement=", getName(e.srcElement));
                console.log("e.currentTarget=", getName(e.currentTarget));
                console.log("this=", getName(this));
                console.log("========================================================");
            }



            function getName(ele) {
                if (ele==null) {
                    return ele;
                }else if (ele.className) {
                    return ele.className;
                } else if (ele.tagName) {
                    return ele.tagName;
                }else if (ele.nodeName) {
                    return ele.nodeName;
                } else {
                    return ele;
                }
            }

})

转载于:https://www.cnblogs.com/hyaaon/p/4623613.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值