[JS学习笔记]浅谈Javascript事件模型
2015-07-06 15:15
816 查看
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; } } })
相关文章推荐
- js 鼠标事件
- js比较两个日期大小
- DataTable和Json的相互转换
- json javascript css php xml简介 客户端服务器
- 匿名类中在Json中使用
- net中对象转化为Json标准的四种常见类型
- Json是什么
- C#代码试运行在服务器端----JS代码是运行在浏览器端
- javascript
- <jsp:include>
- ExtJS 开发问题总结
- javascript中JSON对象使用
- extjs 在IE8下TreePanel第一次无法显示问题
- JSON.parse()和JSON.stringify()
- js 输出二维数组的最大值
- js输出二维数组最长的子数组
- js 输出数组最大值
- 毫秒数到日期转换 javascript
- 第四章 javaScript运算符
- JSON数组多字段排序