addEventListener(),事件监听,用于向指定的元素添加事件监听

语法:addEventListener(event,function,useCapture);

第一个参数event:指事件的类型(如’click’,‘mousedown’)
第二个参数function:事件触发后调用的函数
第三个参数useCapture:设置传递的类型,默认值为false,即冒泡传递(可省略);值为true时,捕获传递。

例:

         <button id="btn">点击</button><script>document.getElementById("btn").addEventListener("click",function () {console.log(Date());});</script>

(它允许给一个事件注册多个监听器,且不会覆盖已存在的事件)
例:

         <button id="btn">点击</button><script>document.getElementById("btn").addEventListener("click",function () {console.log("我是第一个冒泡传递");})document.getElementById("btn").addEventListener("click",function () {console.log("我是第二个冒泡传递");})</script>

可以添加不同的事件类型
例:

         <button id="btn">点击</button><script>document.getElementById("btn").addEventListener("click",function () {console.log("我是点击的冒泡传递");});document.getElementById("btn").addEventListener("mouseover",function () {console.log("我是鼠标移入的事件传递");});document.getElementById("btn").addEventListener("mouseout",function () {console.log("我是鼠标移出的事件传递");});window.addEventListener("resize",function () {console.log("重置窗口");});</script>

使用匿名函数传递参数
例:

         <button id="btn">点击</button><script>document.getElementById("btn").addEventListener("click",function () {console.log(def(5,8));});function def(a,b) {return a*b;}</script>

removeEventListener(),用来移除事件的监听
例:

     <button id="btn">点击</button><script>document.getElementById("btn").addEventListener("click",one);function one(){console.log("我是第一个冒泡传递");};//移除事件document.getElementById("btn").removeEventListener("click",one);</script>

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

在冒泡中,内部元素的事件会先被触发,然后再触发外部元素; 【从里到外】
在捕获中,外部元素的事件会被先触发,然后才会触发内部元素的事件。【从外到里】

例:

             <div id="box"><p id="demo">冒泡</p></div><br /><div id="div"><p id="px">捕获</p></div><script>document.getElementById("demo").addEventListener("click",function () {console.log("p元素被点击");});//false可省略document.getElementById("box").addEventListener("click",function () {console.log("div元素被点击");});document.getElementById("px").addEventListener("click",function () {console.log("第二个p元素被点击");},true);document.getElementById("div").addEventListener("click",function () {console.log("第二个div元素被点击");},true);</script>

浏览器的兼容性问题:在IE9之前,只能使用attachEvent

添加:attachEvent()方法
移除:detachEvent()方法

使用 attachEvent 方法有个缺点,this 的值会变成 window 对象的引用而不是触发事件的元素

addEventListener() 跨浏览器的解决方法
例:

     <button id="btn">点击</button><script>var x = document.getElementById("btn");if (x.addEventListener){//大部分浏览器x.addEventListener("click",def);} else if (x.attachEvent){//IE8及以下浏览器x.attachEvent("onclick",def);};function def() {alert("跨浏览器的解决方法");};</script>

冒泡传递和捕获传递:

<div id="cla"><button id="btn"><p id="mp">冒泡</p></button>
</div><br /><div id="box"><button id="btn1"><p id="bh">捕获</p></button>
</div><script>document.getElementById("cla").addEventListener("click",function(){console.log("div标签被点击");});document.getElementById("btn").addEventListener("click",function(){console.log("button标签被点击");});document.getElementById("mp").addEventListener("click",function(){console.log("p标签被点击");});document.getElementById("box").addEventListener("click",function () {console.log("div被捕获");},true);document.getElementById("btn1").addEventListener("click",function () {console.log("button被捕获");},true);document.getElementById("bh").addEventListener("click",function () {console.log("p被捕获");},true);</script>

冒泡传递:

捕获传递:

JS addEventListener()方法相关推荐

  1. JS:attachEvent和addEventListener方法

    <SCRIPT LANGUAGE="JavaScript"> <!--     /**************************************** ...

  2. js常用对象:点击、双击、onload事件、鼠标相关、onblur事件和onfocus事件等;通过循环给多个元素添加事件、通过addEventListener() 方法 监听事件函数...

    1.通过标签内部添加事件 (1)onclick事件:单击事件 (2)ondbclick事件:双击事件 (3)onload事件:只能在body中使用,入口函数里有:window.   .οnlοad=f ...

  3. addEventListener方法与on事件的区别

    文章出自个人博客https://knightyun.github.io/2018/05/31/js-eventlistener,转载请申明 on事件 Javascript中可以对一些页面的事件设定触发 ...

  4. addEventListener方法

    addEventListener()方法 这个方法设定一个事件监听器,当某一事件发生通过设定的参数执行操作.语法是: addEventListener(event, function, useCapt ...

  5. js 原生方法 -- 模拟浏览器的 点击事件

    js 原生方法 – 模拟浏览器的 点击事件 1. 创建自定事件并监听 可看看 MDN 的 Evnet, CustomEvent 对象 <!DOCTYPE html> <html la ...

  6. js,addEventListener参数传递

    转载自:js,addEventListener参数传递 - 股墓山庄庄主 - 博客园 代码: var elems = document.getElementsByTagName('a');for (v ...

  7. js onclick方法

    js  onclick方法,方法传参 <!DOCTYPE html> <html><head><meta charset="UTF-8"& ...

  8. JS replace()方法-字符串首字母大写

    replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. replace()方法有两个参数,第一个参数是正则表达式,正则表达式如果带全局标志/g,则是代表替换 ...

  9. 22个超详细的 JS 数组方法

    22个超详细的 JS 数组方法 数组是 js 中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响. 一.创建数组 1.使用数组 ...

最新文章

  1. ngrok 内网穿透
  2. Java_异常_03_ java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory
  3. linkedlist(c语言_简单实现)
  4. Matlab 数字图像处理1---图像的收缩和放大
  5. webclientt和httpwebrequest
  6. Openstack 与VMware 不同CPU迁移原理
  7. GitHub 发布中文版帮助文档,这翻译也是醉了~
  8. 利用httponly提升应用程序安全性
  9. STL系列使用教程(一)基础概念
  10. 华为怎么删除自带的音乐_华为手机独有的这个模式,让睡觉更舒畅
  11. 面试官:换人!赶快换人!连CopyOnWriteArrayList都没听过!确实没听过
  12. echo -e <<EOF $()三种操作的意义
  13. 复合函数求导经典例题_复合函数求导公式大全_复合函数求导法则_复合函数求导经典例题_复合函数求导导学案...
  14. 【C语言进阶】预定义详解
  15. 服务器数据恢复成功案例(磁盘阵列恢复)
  16. js获取当前是第几周
  17. 全球及中国直播平台市场发展分析及投资战略规划报告2023-2030年
  18. windows 下连服务器
  19. Python-提升爬虫速度三种方式
  20. SpringCloud+MySQL+Vue实现人脸识别智能考勤管理系统

热门文章

  1. SAP S4 FI后台详细配置教程- PART4 (科目及税费相关配置篇)
  2. 【云原生】-Docker部署SQL Server及最佳应用
  3. C++对象模型学习——构造函数语意学
  4. 【angular学习】自定义实现双向绑定
  5. 银行接口数据包(银行名称获取)
  6. 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(七)-SQL注入字符型
  7. SVN提交(commit)时必须填写备注信息设置
  8. 集训队每周一赛2020-03-13(构造+找规律+字符串+并查集)
  9. 红米手机root之后 eclipse无法打开data目录
  10. 硬盘的读写速度如何计算