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 添加/移除CSS类实现代码
Feb 11 Javascript
Javascript下IE与Firefox下的差异兼容写法总结
Jun 18 Javascript
js获取IFRAME当前的URL的方法
Nov 13 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
Oct 19 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
Nov 16 Javascript
JS实现的RGB网页颜色在线取色器完整实例
Dec 21 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
May 29 Javascript
利用PM2部署node.js项目的方法教程
May 10 Javascript
js下拉菜单生成器dropMenu使用方法详解
Aug 01 Javascript
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 Javascript
vue多页面开发和打包正确处理方法
Apr 20 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
Oct 24 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 命令行参数详解及应用
2011/05/18 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
完美的php分页类
2017/10/24 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
python 从远程服务器下载东西的代码
2013/02/10 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
Python 字符串池化的前提
2020/07/03 Python
浅析Python的命名空间与作用域
2020/11/25 Python
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
企业统计员岗位职责
2013/12/13 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
2014年消防工作总结
2014/11/21 职场文书
婚宴邀请函
2015/01/30 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL