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 相关文章推荐
JS 事件绑定函数代码
Apr 28 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
Oct 14 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
jquery利用命名空间移除绑定事件的方法
Mar 11 Javascript
基于jQuery实现返回顶部实例代码
Jan 01 Javascript
BootStrap的JS插件之轮播效果案例详解
May 16 Javascript
Vuex中mutations与actions的区别详解
Mar 01 Javascript
create-react-app修改为多页面支持的方法
May 17 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
Jun 05 Javascript
如何把vuejs打包出来的文件整合到springboot里
Jul 26 Javascript
iView-admin 动态路由问题的解决方法
Oct 03 Javascript
微信打开网址添加在浏览器中打开提示的办法
May 20 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实现基于文本的摩斯电码生成器
2016/01/11 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
pytorch多进程加速及代码优化方法
2019/08/19 Python
Python(PyS60)实现简单语音整点报时
2019/11/18 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
2019年c语言经典面试题目
2016/08/17 面试题
信息专业本科生个人的自我评价
2013/10/28 职场文书
集团公司人力资源部岗位职责
2014/01/03 职场文书
数控专业自荐书范文
2014/03/16 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
入党群众意见范文
2015/06/02 职场文书
成绩单家长意见
2015/06/03 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python