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
  1. $(function(){ //dom0级事件绑定
  2. var eleArr_d1 = $.makeArray($(".demo1").find(".layer1,.layer2,.layer3"));
  3. $.each(eleArr_d1, function (i, o) {
  4. o.onclick = fn0;
  5. });
  6.  
  7. function fn0(e) {
  8. e = e || window.event;
  9. console.log("e.target=", getName(e.target));
  10. console.log("e.srcElement=", getName(e.srcElement));
  11. console.log("e.currentTarget=", getName(e.currentTarget));
  12. console.log("this=", getName(this));
  13. console.log("========================================================");
  14. }
  15.  
  16. //dom2级事件绑定[IE]
  17. var eleArr_d2 = $.makeArray($(".demo2").find(".layer1,.layer2,.layer3"));
  18. if (document.attachEvent) {
  19. $.each(eleArr_d2, function(i, o) {
  20. o.attachEvent("onclick", function() { fn2_ie.apply(o,arguments); });//改变this指向
  21. });
  22. } else {
  23. $(".demo2").find(".error").text("当前浏览器不支持attachEvent").show().css({ display: "inline-block" });
  24. }
  25.  
  26. function fn2_ie(e) {
  27. e = e || window.event;
  28. console.log("e.target=", getName(e.target));
  29. console.log("e.srcElement=", getName(e.srcElement));
  30. console.log("e.currentTarget=", getName(e.currentTarget));
  31. console.log("this=", getName(this));
  32. console.log("========================================================");
  33. }
  34.  
  35. //dom2级事件绑定[FF]
  36. var eleArr_d3 = $.makeArray($(".demo3").find(".layer1,.layer2,.layer3"));
  37. if (document.addEventListener) {
  38. $.each(eleArr_d3, function(i, o) {
  39. if (o.addEventListener) o.addEventListener("click", fn3_ff, false);
  40. });
  41. } else {
  42. $(".demo3").find(".error").text("当前浏览器不支持addEventListener").css({display:"inline-block"});
  43. }
  44.  
  45. function fn3_ff(e) {
  46. e = e || window.event;
  47. console.log("e.target=", getName(e.target));
  48. console.log("e.srcElement=", getName(e.srcElement));
  49. console.log("e.currentTarget=", getName(e.currentTarget));
  50. console.log("this=", getName(this));
  51. console.log("========================================================");
  52. }
  53.  
  54. function getName(ele) {
  55. if (ele==null) {
  56. return ele;
  57. }else if (ele.className) {
  58. return ele.className;
  59. } else if (ele.tagName) {
  60. return ele.tagName;
  61. }else if (ele.nodeName) {
  62. return ele.nodeName;
  63. } else {
  64. return ele;
  65. }
  66. }
  67.  
  68. })

[JS学习笔记]浅谈Javascript事件模型的更多相关文章

  1. 浅谈Javascript事件模拟

    事件是用来描述网页中某一特定有趣时刻的,众所周知事件通常是在由用户和浏览器进行交互时触发,其实不然,通过Javascript可以在任何时间触发特定的事件,并且这些事件与浏览器创建的事件是相同的.这就意 ...

  2. Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)

    横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点: ...

  3. java设计模式学习笔记--浅谈设计模式

    设计模式的目的 编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战.设计模式为了让程序具有更好的 1.代码重用性(即:相同功能的代码,不用多次编写) ...

  4. node.js学习笔记(三)——事件循环

    要理解事件循环,首先要理解事件驱动编程(Event Driven Programming).它出现在1960年.如今,事件驱动编程在UI编程中大量使用.JavaScript的一个主要用途是与DOM交互 ...

  5. 【JS学习笔记】提取行间事件

    行间提取事件第一种方法: function 名字() { ... } oBtn.onclick=名字: 第二种方法: oBtn.onclick=function () { ... } 其实在JS当中, ...

  6. Node.js学习笔记(三): 事件机制

    大部分的nodejs核心api都建立在异步的事件驱动架构之上,所以events是Node.js 最重要的模块,它提供了唯一的接口.events 模块不仅用于用户代码与 Node.js 下层事件循环的交 ...

  7. JS学习笔记9之event事件及其他事件

    -->鼠标事件-->event事件对象-->默认事件-->键盘事件(keyCode)-->拖拽效果 一.鼠标事件 onclick ---------------鼠标点击事 ...

  8. struts 2学习笔记—浅谈struts的线程安全

    Sruts 2工作流程: Struts 1中所有的Action都只有一个实例,该Action实例会被反复使用.通过上面Struts 2 的工作流程的红色字体部分我们可以清楚看到Struts 2中每个A ...

  9. Java学习笔记——浅谈数据结构与Java集合框架(第二篇、Queue、Set)

    江南好,何处异京华. 香散翠帘多在水,绿残红叶胜于花.无事避风沙. --<纳兰词> 诗词再好,大图不能忘 上大图: 先说说栈和队列: 栈就好比手枪的弹匣,你往里面压入子弹,最先压入的子弹就 ...

随机推荐

  1. 关于shared pool的深入探讨(三)

    基本命令: ALTER SESSION SET EVENTS 'immediate trace name LIBRARY_CACHE level LL'; 其中LL代表Level级别,对于9.2.0及 ...

  2. NIO复习02

    Selector 1. Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管 ...

  3. Eclipse+maven 导致Eclipse启动后Build workspaces卡死或者下载缓慢的问题

    参考文档: (1)Eclipse 一直不停 building workspace完美解决总结 (2)eclipse 一直building workspace 问题 解决办法: (1)第一步: 修改ec ...

  4. bug最后汇总-2018/08/03

    一.对于点击后请求时间过长的按钮 现象:容易给用户点击无效的错觉,从而导致多次点击,从而发出多个相同请求,这显然是不符合我们意愿的 解决: 用户点击发出多个请求:加个锁,当用户点击后,将锁关闭,使用户 ...

  5. elasticsearch报错[WARN ][bootstrap ] Unable to lock JVM Memory: error=12,reason=Cannot allocate memory,解决

    早上在服务器上安装elasticsearch集群,在其中的一台上面安装好elasticsearch之后安装了一些插件,其中一个插件是marvel,结果可能是新版本不支持这个插件,就没有安装成功,也就索 ...

  6. JVM调优总结(一)

    数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...

  7. iOS 10 系统 AVPlayer视频播放不了问题解决

    使用[AVAudioPlayer Play]时出现了异常... 由于xcode中设置了当所有异常出现时的断点,,解决办法是将all改为Objective-C: libc++abi.dylib`__cx ...

  8. Netty-SocketIO的Web推送实战应用

    netty-socketio是一个开源的Socket.io服务器端的一个java的实现, 它基于Netty框架.可应用于服务端主动推送消息到客户端等场景,比如说股票价格变化.k线图的走势,和webso ...

  9. 《大型网站系统与JAVA中间件实践》读书笔记-消息中间件

    消息中间件 1.消息中间件的价值 1.1 透过示例看消息中间件对应用的解耦 1.1.1.通过服务调用让其他系统感知事件发生的方式 假设我们要做一个用户登录系统,其中需要支持的一个功能是,用户登录成功 ...

  10. elasticsearch 拼音搜索

    现在很多公司都开始使用es来做搜索,我们公司目前也有好几个业务部门在用,我主要做商户搜索,为业务部门提供基础支持.上周把呼叫中心的搜索重新整理了下,在新增几个字段后,全量同步发现通过拼音首字母搜索无法 ...