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 相关文章推荐
jquery实现鼠标滑过小图时显示大图的方法
Jan 14 Javascript
jQuery和AngularJS的区别浅析
Jan 29 Javascript
JavaScript中常见的字符串操作函数及用法汇总
May 04 Javascript
AngularJS基础学习笔记之控制器
May 10 Javascript
JavaScript的面向对象编程基础
Aug 13 Javascript
jQuery复制节点用法示例(clone方法)
Sep 08 Javascript
AngularJS实现路由实例
Feb 12 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
Dec 07 Javascript
Vue插件打包与发布的方法示例
Aug 20 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
Aug 28 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
Feb 21 Javascript
vue.js 使用原生js实现轮播图
Apr 26 Vue.js
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
五款PHP代码重构工具推荐
2014/10/14 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
详解AngularJS中的http拦截
2016/02/09 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
python魔法方法-自定义序列详解
2016/07/21 Python
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
python 编写简单网页服务器的实例
2018/06/01 Python
python调用百度语音识别api
2018/08/30 Python
Python3多线程基础知识点
2019/02/19 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
C/C++有关内存的思考题
2015/12/04 面试题
行政人员岗位职责
2013/12/08 职场文书
采购部部门职责
2013/12/15 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
环境保护标语
2014/06/20 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
python flappy bird小游戏分步实现流程
2022/02/15 Python
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers