js中DOM事件绑定分析


Posted in Javascript onMarch 18, 2018

js事件绑定

JavaScript 有三种事件模型:

  • 内联模型
  • 脚本模型
  • DOM2 模型

1、内联模型

//基本废除不用
<input type="button" value="按钮" onclick="alert('Lee');" />
<input type="button" value="按钮" onclick="box();" />

2、脚本模型

//基本不用
var input = 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.有内存泄漏的问题

Javascript 相关文章推荐
基于jQuery图片平滑连续滚动插件
Apr 27 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
Feb 11 Javascript
js数组转json并在后台对其解析具体实现
Nov 20 Javascript
使用jQuery设置disabled属性与移除disabled属性
Aug 21 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
Aug 06 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
Aug 15 Javascript
JS触摸与手势事件详解
May 09 Javascript
JS+canvas画一个圆锥实例代码
Dec 13 Javascript
vue使用echarts图表的详细方法
Oct 22 Javascript
微信小程序模板template简单用法示例
Dec 04 Javascript
vueScroll实现移动端下拉刷新、上拉加载
Mar 22 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
Sep 14 Javascript
js中如何完美的解析数据
Mar 18 #Javascript
解决使用vue.js路由后失效的问题
Mar 17 #Javascript
vue实现的上传图片到数据库并显示到页面功能示例
Mar 17 #Javascript
Vue的路由动态重定向和导航守卫实例
Mar 17 #Javascript
JS实现为动态创建的元素添加事件操作示例
Mar 17 #Javascript
对vue里函数的调用顺序介绍
Mar 17 #Javascript
基于vue2.0动态组件及render详解
Mar 17 #Javascript
You might like
PHP中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
php面向对象值单例模式
2016/05/03 PHP
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
教师找工作推荐信
2013/11/23 职场文书
2014年检验科工作总结
2014/11/22 职场文书
2014年少先队工作总结
2014/12/03 职场文书
在职证明书模板
2015/06/15 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
Python实现简单的俄罗斯方块游戏
2021/09/25 Python
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
SQL SERVER触发器详解
2022/02/24 SQL Server
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang