js中DOM事件绑定分析
js事件绑定
JavaScript有三种事件模型:
- 内联模型
- 脚本模型
- DOM2模型
1、内联模型
//基本废除不用
2、脚本模型
//基本不用
varinput=document.getElementsByTagName('input')[0];//得到input对象
input.onclick=function(){//匿名函数执行
alert('Lee');
};
事件处理函数影响的元素何时发生
onabort图像当图像加载被中断时
onblur窗口、框架、所有表单对象当焦点从对象上移开时
onchange输入框,选择框和文本区域当改变一个元素的值且失去焦点时
onclick链接、按钮、表单对象、图像映射区域当用户单击对象时
ondblclick链接、按钮、表单对象当用户双击对象时
ondragdrop窗口当用户将一个对象拖放到浏览器窗口时
onError脚本当脚本中发生语法错误时
onfocus窗口、框架、所有表单对象当单击鼠标或者将鼠标移动聚焦到窗口或框架时
onkeydown文档、图像、链接、表单当按键被按下时
onkeypress文档、图像、链接、表单当按键被按下然后松开时
onkeyup文档、图像、链接、表单当按键被松开时
onload主题、框架集、图像文档或图像加载后
onunload主体、框架集文档或框架集卸载后
onmouseout链接当图标移除链接时
onmouseover链接当鼠标移到链接时
onmove窗口当浏览器窗口移动时
onreset表单复位按钮单击表单的reset按钮
onresize窗口当选择一个表单对象时
onselect表单元素当选择一个表单对象时
onsubmit表单当发送表格到服务器时
3、内联模型
“DOM2级事件”定义了两个方法,用于添加事件和删除事件处理程序的操作:
addEventListener()和removeEventListener()。所有DOM节点中都包含这两个方法,并且它们都接受3个参数;事件名、函数、冒泡或捕获的布尔值(true表示捕获,false表示冒泡)
window.addEventListener('load',function(){
alert('Lee');
},false);
window.removeEventListener('load',function(){
alert('Mr.Lee');
},false)
PS:IE实现了与DOM中类似的两个方法:attachEvent()和detachEvent()。这两个方法接受
相同的参数:事件名称和函数。
在使用这两组函数的时候,先把区别说一下:
1.IE不支持捕获,只支持冒泡;
2.IE添加事件不能屏蔽重复的函数;
3.IE中的this指向的是window而不是DOM对象。
4.在传统事件上,IE是无法接受到event对象的,但使用了attchEvent()却可以,但有些区别。
```javascript
window.attachEvent('load',function(){
alert('Lee');
},false);
window.detachEvent('load',function(){
alert('Mr.Lee');
},false)
```
PS:IE中的事件绑定函数attachEvent()和detachEvent()可能在实践中不去使用,有几个原因:
1.IE9就将全面支持W3C中的事件绑定函数;
2.IE的事件绑定函数无法传递this;
3.IE的事件绑定函数不支持捕获;
4.同一个函数注册绑定后,没有屏蔽掉;5.有内存泄漏的问题