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 相关文章推荐
js不完美解决click和dblclick事件冲突问题
Jul 16 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
Apr 08 Javascript
document.forms用法示例介绍
Jun 26 Javascript
jquery SweetAlert插件实现响应式提示框
Aug 18 Javascript
javascript验证内容为数字以及长度为10的简单实例
Aug 20 Javascript
Bootstrap表格制作代码
Mar 17 Javascript
iscroll实现下拉刷新功能
Jul 18 Javascript
Angular4学习之Angular CLI的安装与使用教程
Jan 04 Javascript
Angular网络请求的封装方法
May 22 Javascript
微信小程序实现文字跑马灯
May 26 Javascript
vue跳转页面的几种方法(推荐)
Mar 26 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
Jul 23 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
PHP编码规范-php coding standard
2007/03/16 PHP
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
PHP查询分页的实现代码
2017/06/09 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
学习javascript面向对象 理解javascript原型和原型链
2016/01/04 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
python实现汉诺塔递归算法经典案例
2021/03/01 Python
Python 装饰器深入理解
2017/03/16 Python
numpy中索引和切片详解
2017/12/15 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
大型车展策划方案
2014/02/01 职场文书
医学专业职业生涯规划范文
2014/02/05 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android
python_tkinter弹出对话框创建
2022/03/20 Python