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特权方法定义作用以及与公有方法的区别
Mar 18 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
Oct 21 Javascript
深入剖析JavaScript中的枚举功能
Mar 06 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
Oct 12 Javascript
自学实现angularjs依赖注入
Dec 20 Javascript
vue表单绑定实现多选框和下拉列表的实例
Aug 12 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
Sep 25 Javascript
JS使用正则表达式找出最长连续子串长度
Oct 26 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
Jul 26 Javascript
Vue js with语句原理及用法解析
Sep 03 Javascript
原生js实现自定义消息提示框
Nov 19 Javascript
Node.js文本文件BOM头的去除方法
Nov 22 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
PHP 批量更新网页内容实现代码
2010/01/05 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
考博自荐信
2013/10/25 职场文书
自我鉴定四大框架
2014/01/17 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
浪漫婚礼主持词
2014/03/14 职场文书
气象学专业个人求职信
2014/03/15 职场文书
企业理念标语
2014/06/09 职场文书
离婚协议书范本样本
2014/08/19 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年技术部工作总结
2014/12/12 职场文书
2016新年慰问信范文
2015/03/25 职场文书
护士求职自荐信
2015/03/25 职场文书