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高级程序设计 扩展--关于动态原型
Nov 09 Javascript
javascript学习笔记(六) Date 日期类型
Jun 19 Javascript
循环 vs 递归浅谈
Feb 28 Javascript
DOM操作一些常用的属性汇总
Mar 13 Javascript
javascript中递归函数用法注意点
Jul 30 Javascript
json格式的javascript对象用法分析
Jul 04 Javascript
运用js教你轻松制作html音乐播放器
Apr 17 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
Dec 16 Javascript
Angular弹出模态框的两种方式
Oct 19 Javascript
Angular实现下拉框模糊查询功能示例
Jan 03 Javascript
QRCode.js二维码生成并能长按识别
Oct 16 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
Sep 06 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 xfocus防注入资料
2008/04/27 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
浅谈php://filter的妙用
2019/03/05 PHP
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
javascript IFrame 强制刷新代码
2009/07/23 Javascript
学习ExtJS 访问容器对象
2009/10/07 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
Ajax的工作原理
2015/12/04 面试题
读书演讲主持词
2014/03/18 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
市场营销工作计划书
2014/05/06 职场文书
优秀德育工作者事迹材料
2014/05/07 职场文书
会议欢迎词
2015/01/23 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
什么是css原子化,有什么用?
2022/04/24 HTML / CSS