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基础的动画教程,直观易懂
Jan 10 Javascript
JavaScript核心语法总结(推荐)
Jun 02 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
Aug 18 Javascript
BooStrap对导航条的改造实践小结
Sep 21 Javascript
js捕捉键盘事件和按键键值的方法
Oct 10 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
Dec 26 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
Dec 20 jQuery
使用命令行工具npm新创建一个vue项目的方法
Dec 27 Javascript
JavaScript 实现同时选取多个时间段的方法
Oct 17 Javascript
iSlider手机端图片滑动切换插件使用详解
Dec 24 Javascript
Js逆向实现滑动验证码图片还原的示例代码
Mar 10 Javascript
在react中使用vue的状态管理的方法示例
May 02 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
PHP5 安装方法
2007/01/15 PHP
php下实现农历日历的代码
2007/03/07 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
2009/10/09 PHP
ThinkPHP安装和设置
2015/07/27 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
扩展easyui.datagrid,添加数据loading遮罩效果代码
2010/11/02 Javascript
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
全面理解闭包机制
2016/07/11 Javascript
详解JavaScript树结构
2017/01/09 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
Python中将字典转换为列表的方法
2016/09/21 Python
Python2和Python3中print的用法示例总结
2017/10/25 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
英文翻译的自我评价语句
2013/10/04 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
五四演讲稿范文
2014/09/03 职场文书
2014年纪检工作总结
2014/11/12 职场文书
2014年秘书工作总结
2014/11/25 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
民间借贷被告代理词
2015/05/23 职场文书
小学三年级数学教学反思
2016/02/16 职场文书