DOM事件处理总结
    
      2019-04-11
    
    
  
  DOM事件处理总结
事件流
事件流分为三个阶段
- 捕获阶段,自顶向下到目标元素
 - 处于目标阶段
 - 冒泡阶段,自底向上到document
 
HTML事件处理程序
最熟悉的方法,直接在HTML里面写死绑定。
<input type="button" value="click" onclick="showMessage()">
这种方法最简单,但是存在问题:
- HTML和JS紧密耦合,可修改性不好。
 - 在JS没加载完之前用户点击了按钮,会弹出错误,很丑。
 
DOM0级事件处理程序
也很简单,且被浏览器支持的很好。
var btn = document.getElementById('btn');
btn.onclick=function(){/*...*/};
特点如下:
- this是引用当前元素
 - 事件在冒泡阶段被处理
 
DOM2级事件处理程序
定义了所有DOM节点都必须有两个方法:
addEventListener()removeEventListener()
var btn = document.getElementById('btn');
btn.addEventListener('click',function(){/*...*/});
这两个方法都有三个参数(type, listener[, useCapture])
type:事件名listener: 想添加的回调事件useCapture: 若在捕获阶段调用事件处理程序
特点如下:
- this引用当前元素
 - 可以指定事件在冒泡阶段或捕获阶段被处理
 - 可以添加多个事件处理程序
 
IE事件处理程序
attachEvent()detachEvent()
懒得记了,希望以后微软可以少参和前端。
事件对象
所有事件处理程序都可以接收一个event对象入参,html事件处理程序可以手动将event传入。
event对象代表了本次事件,属性都为只读,只能通过方法来改变事件,重要的属性和方法有:
type事件类型currentTarget事件元素目标stopPropagation()阻止冒泡bubbles若可以冒泡preventDefault()阻止默认行为cancelable若可以阻止默认行为
事件处理程序中,this总等于event.currentTarget。
事件类型
事件类型指event.type中可以出现的值,也是可以绑定事件处理程序的值。
- 鼠标事件
    
- click
 - dbclick
 - mousedown
 - mouseout
 - mouseover
 - mouseup
 - mousemove
 
 - 键盘事件
    
- keydown
 - keypress
 - keyup
 
 - html事件
    
- load
 - unload
 - abort
 - error
 - select
 - change
 - submit
 - reset
 - resize
 - focus
 - blur
 
 - DOM事件
 - 其他特有非标准事件,比如触摸,横屏等