js HTML DOM EventListener功能与用法实例分析


Posted in Javascript onApril 27, 2020

本文实例讲述了js HTML DOM EventListener功能与用法。分享给大家供大家参考,具体如下:

DOM EventListener

用于向指定元素添加事件句柄。

在用户点击按钮时触发监听事件:

document.getElementById('myBtn').addEventListener('click', displayDate);

addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。

可以向一个元素添加多个事件句柄。

<script>
var x = document.getElementById("myBtn");
x.addEventListener("mouseover", myFunction);
x.addEventListener("click", mySecondFunction);
x.addEventListener("mouseout", myThirdFunction);
function myFunction() {
  document.getElementById("demo").innerHTML += "Moused over!<br>"
}
function mySecondFunction() {
  document.getElementById("demo").innerHTML += "Clicked!<br>"
}
function myThirdFunction() {
  document.getElementById("demo").innerHTML += "Moused out!<br>"
}
</script>

可以向同个元素添加多个同类型的事件句柄,如:两个 "click" 事件。

<script>
var x = document.getElementById("myBtn");
x.addEventListener("click", myFunction);
x.addEventListener("click", someOtherFunction);
function myFunction() {
  alert ("Hello World!")
}
function someOtherFunction() {
  alert ("函数已执行!")
}
</script>

可以向任何 DOM 对象添加事件监听,不仅仅是 HTML 元素。如: window 对象。

addEventListener() 方法允许你在 HTML DOM 对象添加事件监听, HTML DOM 对象如: HTML 元素, HTML 文档, window 对象。或者其他支出的事件对象如: xmlHttpRequest 对象

<script>
window.addEventListener("resize", function(){
  document.getElementById("demo").innerHTML = Math.random();
});
</script>

addEventListener() 方法可以更简单的控制事件(冒泡与捕获)。

当使用 addEventListener() 方法时, JavaScript 从 HTML 标记中分离开来,可读性更强, 在没有控制HTML标记时也可以添加事件监听。

可以使用 removeEventListener() 方法来移除事件的监听。

语法

element.addEventListener(event, function, useCapture);
  • 第一个参数是事件的类型 (如 "click" 或 "mousedown").
  • 第二个参数是事件触发后调用的函数。
  • 第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。

注意:不要使用 "on" 前缀。 例如,使用 "click" ,而不是使用 "onclick"。

事件冒泡或事件捕获?

事件传递有两种方式:冒泡与捕获。

事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?

在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。

在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。

addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型:

addEventListener(event, function, useCapture);

默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。

<script>
document.getElementById("myP").addEventListener("click", function() {
  alert("你点击了 P 元素!");
}, false);
document.getElementById("myDiv").addEventListener("click", function() {
  alert(" 你点击了 DIV 元素 !");
}, false);
document.getElementById("myP2").addEventListener("click", function() {
  alert("你点击了 P2 元素!");
}, true);
document.getElementById("myDiv2").addEventListener("click", function() {
  alert("你点击了 DIV2 元素 !");
}, true);
</script>

removeEventListener() 方法

removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:

<script>
document.getElementById("myDIV").addEventListener("mousemove", myFunction);
function myFunction() {
  document.getElementById("demo").innerHTML = Math.random();
}
function removeHandler() {
  document.getElementById("myDIV").removeEventListener("mousemove", myFunction);
}
</script>

浏览器支持

表格中的数字表示支持该方法的第一个浏览器的版本号。

方法
addEventListener() 1.0 9.0 1.0 1.0 7.0
removeEventListener() 1.0 9.0 1.0 1.0 7.0

注意: IE 8 及更早 IE 版本,Opera 7.0及其更早版本不支持 addEventListener()removeEventListener() 方法。但是,对于这类浏览器版本可以使用 detachEvent() 方法来移除事件句柄:

element.attachEvent(event, function);
element.detachEvent(event, function);

例:该实例演示了所有浏览器兼容的解决方法

<script>
var x = document.getElementById("myBtn");
if (x.addEventListener) {
  x.addEventListener("click", myFunction);
} else if (x.attachEvent) {
  x.attachEvent("onclick", myFunction);
}
function myFunction() {
  alert("Hello World!");
}
</script>

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
合并table相同单元格的jquery插件分享(很精简)
Jun 20 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
Nov 08 Javascript
jquery插件uploadify实现带进度条的文件批量上传
Dec 13 Javascript
基于javascript实现样式清新图片轮播特效
Mar 30 Javascript
JavaScript中点击事件的写法
Jun 28 Javascript
前端框架Vue.js构建大型应用浅析
Sep 12 Javascript
深入理解JS中的Function.prototype.bind()方法
Oct 11 Javascript
Vue导出json数据到Excel电子表格的示例
Dec 04 Javascript
vue实现简单loading进度条
Jun 06 Javascript
原生js实现each方法实例代码详解
May 27 Javascript
了解JavaScript函数中的默认参数
May 30 Javascript
js对象简介与基本用法示例
Mar 13 Javascript
JS严格模式原理与用法实例分析
Apr 27 #Javascript
详解使用mocha对webpack打包的项目进行&quot;冒烟测试&quot;的大致流程
Apr 27 #Javascript
详解elementUI中input框无法输入的问题
Apr 27 #Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
Apr 27 #Javascript
Node.js API详解之 tty功能与用法实例分析
Apr 27 #Javascript
React.js组件实现拖拽排序组件功能过程解析
Apr 27 #Javascript
element 中 el-menu 组件的无限极循环思路代码详解
Apr 26 #Javascript
You might like
桌面中心(二)数据库写入
2006/10/09 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
javascript 运算数的求值顺序
2011/08/23 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
vuex 使用文档小结篇
2018/01/11 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python动态视频下载器的实现方法
2019/09/16 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
ASP.NET Core中的配置详解
2021/02/05 Python
类的返射机制中的包及核心类
2016/09/12 面试题
护理专业毕业生自我鉴定
2013/10/08 职场文书
安全生产月活动总结
2014/05/04 职场文书
公共场所禁烟标语
2014/06/25 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
整改通知书格式
2015/04/22 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
研究生论文答辩开场白
2015/05/27 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python