js中的事件模型大致可以分为三种:
原始事件模型(DOM0),DOM2事件模型,IE事件模型;
一.原始事件模型的特点:
事件类型上面有ON(onclick)
没有事件的传播(事件一旦发生就立刻调用事件句柄)
一个DOM对象只能注册一个类型的事件,如果注册了两个,则会发生覆盖,只执行后一个事件;
原始事件模型两种写法
1.将JS代码作为HTML的性质(也就是直接在标签中将HTML元素的性质设置为一段代码)
<button onclick="alert(2)" id='button'>点我</button>
2.将事件处理程序作为js对象的属性
通过document获取
解除:
将null复制给事件函数:
document.getElementById('button').onclick = null;
浏览器可以对每个事件执行默认的动作:
–submit按钮默认行为是提交表单。
特例:对超链接mouseover的window.status显示事件的阻挡,是返回true
<a href="help.htm" onmouseover="window.status='help';return true;">help</a>
二.DOM2事件模型
主要特点:
特点一:有一个事件的传播过程
事件捕获:事件由document对象一直向下捕捉到目标元素
事件执行:目标对象的事件处理程序执行
事件冒泡:事件从目标元素上升到document
所有事件类型都会经历第一阶段,有的事件不会经历第三阶段(submit)
特点二:
一个dom对象可以注册多个相同类型的事件,不会发生事件的覆盖,会依次的执行各个事件函数。
注册:
[object].addEventListener('事件名称',方法名(函数),事件模型(true/false))
解除:
[object].removeEventListener('事件名称',方法名(函数),事件模型(true/false))
true/false决定在那个阶段调用函数
true:捕获
false:冒泡
停止传播:event.stopPropagation()
阻止默认动作:event.preventDefault()
三、IE模型
特点:Event对象不是事件处理程序的函数参数,而是window的全局变量
事件对象event:事件发生时产生的对象。封装了跟事件相关的信息。
div1.onclick = function(){
var e = window.event;
}
DOM得到事件对象
div1.onclick = function(ev){
var e = ev;
}
事件传播过程只有冒泡阶段
注册:
[object].attachEvent("onclick",click1)
解除:
[object].detachEvent("onclick",click1)
停止传播:window.ecent.cancelBubble=true;