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 相关文章推荐
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
Mar 18 Javascript
jQuery下通过$.browser来判断浏览器.
Apr 05 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
Nov 25 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
Jul 21 Javascript
jQuery插件实现适用于移动端的地址选择器
Feb 18 Javascript
JS代码实现根据时间变换页面背景效果
Jun 16 Javascript
Javascript对象字面量的理解
Jun 22 Javascript
JavaScript使用Ajax上传文件的示例代码
Aug 10 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
微信小程序 Animation实现图片旋转动画示例
Aug 22 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
Nov 09 Javascript
Vue 修改网站图标的方法
Dec 31 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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
PHP 编程的 5个良好习惯
2009/02/20 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
PHP rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
PHP APC的安装与使用详解
2013/06/13 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
2020/12/07 Vue.js
python选择排序算法的实现代码
2013/11/21 Python
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
Python面向对象之继承代码详解
2018/01/29 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
opencv与numpy的图像基本操作
2019/03/08 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
敬老院活动总结
2014/04/28 职场文书
作弊检讨书
2015/01/27 职场文书
四则混合运算教学反思
2016/02/23 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技