javascript 事件处理程序

  • 事件冒泡:事件在文档树上向上传播,如有以下结构

    <html>
     <body>
     <div>
      <input type="button"/>
     </div>
     </body>
    </html>
    

当用户点击按钮时,首先在按钮上触发点击事件,接着在包着按钮的div上触发点击事件,然后是body......

  • 事件捕获:在文档树上向下传播,从外层到里层,与时间冒泡传播顺序正好相反。在容器上注册的时间处理程序有机会在事件传播到真实的目标之间捕获它。IE8及以下版本不支持事件捕获。

一 DOM事件

1 HTML事件
缺点:耦合程度高,更改js代码时常常需要修改html里的代码
如:

<input type="button"/ onclick="showMes()">
<script>
 function showMes()
{
alert("hello world")
 }
</script>

2 DOM0级事件
如:

var btn=document.getElementById("btn");
btn.onclick=function(){
...
}

缺点:每个事件目标对于每个特定类型都只能有一种事件处理程序
3 DOM2级事件
addEventListener()
removeEventListener()
上面两个方法都是传入三个参数

  • 事件类型 如click mouseover 注意不用加on
  • 事件函数
  • 布尔值 一般为false true 表示函数将注册为捕获事件处理函数,并在事件的不同调度阶段调用
    支持DOM事件的浏览器有:Chrome,火狐等
    <code>
    btn.addEventListener("click",showMes,false)
    </code>

二 IE事件

提供如下两个方法

1 attachEvent() 添加事件

2 detachEvent() 删除时间

且两个方法传入相同的参数(事件处理程序的名称,事件处理程序的函数)

支持的浏览器:IE8及以下

三 解决浏览器兼容问题

可以根据能力判断来写兼容浏览器的事件处理程序的代码

     // 封装添加事件监听程序
        function addEvent(ele,type,hander){
           // 支持DOM2级
           if(ele.addEventListener){
           ele.addEventListener(type,hander,false);
         }
//不支持DOM2级,支持IE事件
         else if(ele.attachEvent)
         {
          ele.attachEvent('on'+type,hander);
         }
//既不支持DOM2级也不支持IE,只能用DOM0级
         else ele['on'+type]=hander;
        }

<b>
注意:在javascript中,对象的写法等价于中括号的写法
ele.onclick等价于ele['onclick']
</b>

四 事件对象

  1. DOM中的事件对象
  • type 获取事件类型
  • target 获取事件目标
  • stopPropagation() 阻止事件冒泡
  • preventDefault() 阻止事件的默认行为
  1. IE中的事件对象
  • type 获取事件类型
  • scrElement 获取事件目标
  • cancelBubble 用于阻止事件冒泡(是个属性,设为true表示阻止冒泡,设为false表示不阻止冒泡)
  • returnValue 该属性用于阻止默认行为,设为false表示阻止

本文的撰写参考自javascript权威指南第六版以及慕课网上相关教程,错漏之处,欢迎指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • __ 一、事件冒泡和事件捕获__ 事件冒泡事件冒泡就是从HTML中具体的一个元素,沿着DOM树,向父级冒泡,直到d...
    张延伟阅读 2,865评论 0 1
  • 一、事件流 1.1 事件流 事件流:从页面中接受事件的顺序 事件冒泡:即事件开始时由最具体的元素(文档中嵌套层次最...
    范小饭_阅读 4,722评论 1 9
  • JavaScript 程序采用了异步事件驱动编程模型。在这种程序设计风格下,当文档、浏览器、元素或与之相关的对象发...
    劼哥stone阅读 5,028评论 3 11
  • 以下文章为转载,对理解JavaScript中的事件处理机制很有帮助,浅显易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy阅读 8,173评论 1 10
  • 一直想要写写我和我身边的姑娘,在一个陌生的地方。可以肆无忌惮的写,可以真真切切的忆。 我和我身边的姑娘,都是极普通...
    央央未央阅读 2,415评论 2 2