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 各浏览器的 Javascript 效率对比
Jan 23 Javascript
jquery 操作表格实现代码(多种操作打包)
Mar 20 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
Dec 11 Javascript
JS实现动态给图片添加边框的方法
Apr 01 Javascript
JQuery中Bind()事件用法分析
May 05 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
May 11 Javascript
JavaScript中获取纯正的undefined的方法
Mar 06 Javascript
一分钟理解js闭包
May 04 Javascript
jQuery中layer分页器的使用
Mar 13 Javascript
js仿微信抢红包功能
Sep 25 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
Dec 07 Javascript
全面解析Vue中的$nextTick
Dec 24 Vue.js
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
PHP4实际应用经验篇(3)
2006/10/09 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
vue-i18n结合Element-ui的配置方法
2019/05/20 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
python中urllib模块用法实例详解
2014/11/19 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
Python 字符串与数字输出方法
2018/07/16 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
玩具公司的创业计划书
2013/12/31 职场文书
老师给学生的表扬信
2014/01/17 职场文书
中学教师请假制度
2014/02/03 职场文书
个人校本研修方案
2014/05/26 职场文书
市场营销工作计划书
2014/09/15 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
Go gorilla/sessions库安装使用
2022/08/14 Golang