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 相关文章推荐
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
Apr 13 Javascript
JavaScript Math.floor方法(对数值向下取整)
Jan 09 Javascript
javascript模拟map输出与去除重复项的方法
Feb 09 Javascript
javascript中Date format(js日期格式化)方法小结
Dec 17 Javascript
浅谈jQuery中ajaxPrefilter的应用
Aug 01 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
Oct 27 Javascript
Bootstrap3下拉菜单的实现
Feb 22 Javascript
BootStrap selectpicker后台动态绑定数据
Jun 01 Javascript
移动前端图片压缩上传的实例
Dec 06 Javascript
Vue.js 2.x之组件的定义和注册图文详解
Jun 19 Javascript
js getBoundingClientRect使用方法详解
Jul 17 Javascript
JS实现提示效果弹出及延迟隐藏的功能
Aug 26 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
smarty的保留变量问题
2008/10/23 PHP
php入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
php 强制下载文件实现代码
2013/10/28 PHP
php使用curl发送json格式数据实例
2013/12/17 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
JS数学函数Exp使用说明
2012/08/09 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
浅谈js函数三种定义方式 &amp; 四种调用方式 &amp; 调用顺序
2017/02/19 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
Puppet的一些技巧
2018/09/17 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
python爬虫爬取网页表格数据
2018/03/07 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
简述数据库的设计过程
2015/06/22 面试题
高级编程求职信模板
2014/02/16 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
Python源码解析之List
2021/05/21 Python
MySQL为id选择合适的数据类型
2021/06/07 MySQL
MySQL数据库之存储过程 procedure
2022/06/16 MySQL