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面向对象之二 命名空间
Feb 08 Javascript
JS获取页面窗口大小的代码解读
Dec 01 Javascript
javascript日期操作详解(脚本之家整理)
Sep 05 Javascript
js倒计时简单实现方法
Dec 17 Javascript
Bootstrap CSS组件之按钮组(btn-group)
Dec 17 Javascript
Javascript设计模式之装饰者模式详解篇
Jan 17 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
Sep 22 Javascript
vue-resource拦截器设置头信息的实例
Oct 27 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
Oct 31 Javascript
Vue引入jquery实现平滑滚动到指定位置
May 09 jQuery
优雅的使用javascript递归画一棵结构树示例代码
Sep 22 Javascript
Java无向树分析 实现最小高度树
Apr 09 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 win下Socket方式发邮件类
2009/08/21 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
跟老齐学Python之复习if语句
2014/10/02 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
python3中zip()函数使用详解
2018/06/29 Python
Django如何将URL映射到视图
2019/07/29 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
商务日语专业毕业生自荐信
2014/03/27 职场文书
建议书的格式
2014/05/12 职场文书
活动宣传策划方案
2014/05/23 职场文书
学校欢迎标语
2014/06/18 职场文书
公司合作协议范文
2014/10/01 职场文书
导游词之桂林山水
2019/09/20 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android