事件:文档与浏览器窗口中发生的一些特定的交互瞬间。
事件流:从页面中接受事件的顺序。
- 事件冒泡:向上传播,从具体到不那么具体
阻止冒泡:stopPropagation() - 事件捕获:向下传播,从不那么具体到具体。
- DOM事件流:事件捕获阶段、处于目标阶段(事件发生)、事件冒泡阶段
事件处理程序:响应某个事件的函数 (以"on"开头)
- HTML处理程序
<input type="button" value="click" onclick="alert('clicked')">
<input type="button" value="click" onclick="showMesssage()">
- DOM0级事件处理程序
var btn = document.getElementById("mybtn");
btn.onclick = function(){
alert(this.id);
};
btn.onclick = null;
- DOM2级事件处理程序
//addEventListener(事件名,函数,布尔值),可添加多个事件处理程序
var btn = document.getElementById("mybtn");
btn.addEventListener("click",function(){
alert("冒泡阶段调用");
},false)//false表示在冒泡阶段调用
btn.addEventListener("click",function(){
alert("捕获阶段调用");
},true)//true表示在捕获阶段调用
//removeEventListener(),通过addEventListener()添加的事件处理程序只能使用removeEventListener()移除,且removeEventListener()不能移除匿名函数
var btn = document.getElementById("mybtn");
var handler = function(){
alert("冒泡阶段调用");
}
btn.addEventListener("click",handler,false)
btn.removeEventListener("click",handler,false)
- IE事件处理程序
//attachEvent(函数名称,函数)
var btn = document.getElementById("mybtn");
//第一个参数是onclick
btn.attachEvent("onclick",function(){
alert(this===window);//true 注意这里和DOM0的区别,这里的this等于window,因为他是在全局环境中执行的,而DOM0在局部环境执行
})
//detachEvent(函数名称,函数)
var btn = document.getElementById("mybtn");
var handler = function(){
alert(1314);
}
btn.attachEvent("onclick",handler)
btn.detachEvent("onclick",handler)
- 跨浏览器的事件处理程序:结合能力检测就行
事件委托(代理):给DOM树中尽量最高的的层次上添加一个事件处理程序。可以提升性能,可以减少绑定给每个子节点。