JS addEventListener()和attachEvent()方法实现注册事件


Posted in Javascript onJanuary 11, 2021

在 JavaScript 的 DOM 事件模型中,通过调用对象的 addEventListener() 方法注册事件。用法如下:
element.addEventListener(String type, Function listener, boolean useCaptrue);

参数说明如下:

  • type:注册事件的类型名。事件类型与事件属性不同,事件类型名没有 on 前缀。例如,对于事件属性 onclick 来说,所对应的事件类型为 click。
  • listener:监听函数,即事件处理函数。在指定类型的事件发生时将调用该函数。在调用这个函数时,默认传递给它的唯一参数是 event 对象。
  • useCaptrue:是一个布尔值。如果为 true,则指定的事件处理函数将在事件传播的捕获阶段触发;如果为 false,则事件处理函数将在冒泡阶段触发。

示例1

下面示例使用 addEventListener() 为所有按钮注册 click 事件。首先,调用 document 的 getElementsByTagName() 方法捕获所有按钮对象;然后,使用 for 语句遍历按钮集(btn),并使用 addEventListener() 方法分别为每一个按钮注册事件函数,获取当前对象所显示的文本。

<button id="btn1" onclick="btn1();">按 钮 1</button>
<button id="btn2" onclick="btn2(event);">按 钮 2</button>
<script>
  var btn = document.getElementsByTagName("button"); //捕获所有按钮
  for(var i in btn){          //遍历按钮集合
   btn[i].addEventListener("click", function(){
    alert(this.innerHTML);
  }, true);  //为每个按钮对象注册一个事件处理函数,定义在捕获阶段进行响应
  }
</script>

在浏览器中预览,单击不同的按钮,则浏览器会自动显示按钮的名称。效果如图所示:

JS addEventListener()和attachEvent()方法实现注册事件

使用 addEventListener() 方法能够为多个对象注册相同的事件处理函数,也可以为同一个对象注册多个事件处理函数。为同一个对象注册多个事件处理函数对于模块化开发非常有用。

示例2

在下面示例中,为段落文本注册两个事件:mouseover 和 mouseout。当光标移到段落文本上面时会显示为蓝色背景,而当光标移出段落文本时会自动显示为红色背景。这样就不需要破坏文档结构为段落文本增加多个事件属性。

<p id="p1">为对象注册多个事件</p>
<script>
  var p1 = document.getElementById("p1"); //捕获段落元素的句柄
  p1.addEventListener("mouseover", function () {
    this.style.background = 'blue';
  }, true); //为段落元素注册第1个事件处理函数
  p1.addEventListener("mouseout", function () {
    this.style.background = 'blue';
  }, true); //为段落元素注册第2个事件处理函数
</script>

IE 事件模型使用 attachEvent() 方法注册事件。用法如下:

element.attachEvent(etype, eventName)

参数列表如下:

  • etype:设置事件类型,如 onclick、onkeyup、onmousemove 等。
  • eventName:设置时间名称,也就是事件处理函数。

示例3

在下面示例中,为段落标签 <p> 注册两个事件:mouseover 和 mouseout,设计当光标经过时,段落文本背景色显示为蓝色,当光标移开之后,背景色显示为红色。

<p id="p1">为对象注册多个事件</p>
<script>
  var p1 = document.getElementById("p1"); //捕获段落元素
  p1.attachEvent("onmouseover", function () {
    this.style.background = 'blue';
  }); //注册mouseover事件
  p1.attachEvent("onmouseout", function () {
    this.style.background = 'red';
  }); //注册mouseout事件
</script>

使用 attachEvent() 注册事件时,其事件处理函数的调用对象不再是当前事件对象本身,而是 window 对象,因此事件函数中的 this 就指向 window,而不是当前对象,如果要获取当前对象,应该使用 event 的 srcElement 属性。

IE 事件模型中的 attachEvent() 方法第 1 个参数为事件类型名称,需要加上 on 前缀,而使用 addEventListener() 方法时,则不需要这个 on 前缀,如 click。

到此这篇关于JS addEventListener()和attachEvent()方法实现注册事件的文章就介绍到这了,更多相关JS addEventListener()和attachEvent()内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript 控制弹出窗口
Apr 10 Javascript
本地对象Array的原型扩展实现代码
Dec 04 Javascript
jquery隐藏标签和显示标签的实例
Nov 11 Javascript
javascript异步编程的4种方法
Feb 19 Javascript
JS获取当前网页大小以及屏幕分辨率等
Sep 05 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
Jul 18 Javascript
浅谈JavaScript 覆盖原型以及更改原型
Aug 31 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
Nov 29 Javascript
使用vue.js编写蓝色拼图小游戏
Mar 17 Javascript
jQuery使用ajax_动力节点Java学院整理
Jul 05 jQuery
vue实现留言板todolist功能
Aug 16 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
Jul 19 Javascript
JS removeAttribute()方法实现删除元素的某个属性
Jan 11 #Javascript
详解ES6 中的Object.assign()的用法实例代码
Jan 11 #Javascript
vue实现防抖的实例代码
Jan 11 #Vue.js
详解uniapp的全局变量实现方式
Jan 11 #Javascript
微信小程序抽奖组件的使用步骤
Jan 11 #Javascript
JS数组索引检测中的数据类型问题详解
Jan 11 #Javascript
了不起的11个JavaScript代码重构最佳实践小结
Jan 11 #Javascript
You might like
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
php防盗链的常用方法小结
2010/07/02 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
JavaScript 学习点滴记录
2009/04/24 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python进程间通信之共享内存详解
2017/10/30 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
Python验证码截取识别代码实例
2020/05/16 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
秋季开学典礼主持词
2014/03/19 职场文书
库房保管员岗位职责
2014/04/07 职场文书
文明寝室申报材料
2014/05/12 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js