js事件处理、事件对象

事件类型分类:

1 添加在html结构中的事件

<div id="div1" onclick="alert('append click event in html')"> </div>

点击div1之后弹出 append click event in html;其实在html结构中添加的事件也属于dom0级事件。

2 dom0级事件处理

<div id="div1"> </div>
<script>var dom1 = document.getElementById('div1');dom1.onclick = function(){alert(' first dom0 ')};dom1.onclick = function(){alert(' second dom0 ')};
</script>

点击div1之后只弹出 second dom0;说明dom0级事件后面赋值的事件会覆盖掉前面的

如果在div中在加 onclick="alert('append click event in html'), 代码如下:

<div id="div1" onclick="alert('append click event in html')"> </div>
<script>var dom1 = document.getElementById('div1');dom1.onclick = function(){alert(' first dom0 ')};dom1.onclick = function(){alert(' second dom0 ')};
</script>

点击div后 仍然只弹出second dom0, 说明在html中添加的点击事件处理程序也被覆盖。

实际上 dom1.onclick 等价于html结构中div标签中的οnclick=""; 可以把onclick看成dom元素对象的一个属性 dom1{ id:"1", onclick:function(){ ... } }

3 dom2级事件处理

dom.addEventListener(“事件名”,“事件处理程序”,“布尔值”)

布尔值表示该事件的响应顺序,默认值为false。

true:事件捕获:表示在捕获阶段调用事件处理程序。
false:事件冒泡:表示在冒泡阶段调用事件处理程序。
事件传递有两种方式:冒泡与捕获。
事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?
在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。
在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。
关于事件冒泡和捕获在后面再举出实例代码。
使用addEventListener添加事件不会被覆盖也不会覆盖dom0级事件,如下:
<div id="div1" onclick="alert('append click event in html')"> </div>
<script>var dom1 = document.getElementById('div1');var handle = function () {alert('dom2 event handle');};dom1.onclick = function(){alert(' first dom0 ')};dom1.onclick = function(){alert(' second dom0 ')};dom1.addEventListener("click", function(){alert(' first dom2 ')}, false);dom1.addEventListener("click", handle, false);
</script>
点击div1时弹出 second dom0first dom2 、dom2 event handle ,dom0级绑定的最后一个事件覆盖了前面所有的dom0级事件,而绑定的两个dom2级事件都存在,并且先执行dom0级事件在执行dom2级事件。
 
使用removeEventListener移除事件,传入的参数与添加处理程序时addEventListener使用的参数相同。
这也意味着事件处理程序为匿名函数的无法移除,如下所示:
<div> </div>
<script>var dom1 = document.getElementById('div1');var handle = function () {alert('event handle');};dom1.addEventListener("click", function(){alert(' first dom2 ')}, false);dom1.addEventListener("click", function(){alert(' second dom2 ')}, false);dom1.addEventListener("click", handle, false);dom1.removeEventListener("click", handle, false);
    dom1.removeEventListener("click", function(){alert(' second dom2 ')}, false);
</script>

点击div1依次弹出 first dom2 second dom2

关于事件冒泡和捕获的代码实例:

<div id="div1"><div id="div2"><div id="div3"><div id="div4"></div></div></div></div>
<script>var html = document.getElementsByTagName('html')[0];var body = document.getElementsByTagName('body')[0];var dom1 = document.getElementById('div1');var dom2 = document.getElementById('div2');var dom3 = document.getElementById('div3');var dom4 = document.getElementById('div4');window.addEventListener("click", function(){alert('window')}, false);document.addEventListener("click", function(){alert('document')}, true);html.addEventListener("click", function(){alert('html')}, false);body.addEventListener("click", function(){alert('body')}, true);dom1.addEventListener("click", function(){alert('div1')}, false);dom2.addEventListener("click", function(){alert('div2')}, true);dom3.addEventListener("click", function(){alert('div3')}, false);dom4.addEventListener("click", function(){alert('div4')}, false);// addEventListen 添加的第三个参数true则是事件捕获,不添加或false则为事件冒泡, 由事件源dom4元素 --> 父元素dom3 --> 爷爷元素dom2 --> ... --> body --> html --> document --> window  执行事件处理程序// 若从事件源dom4元素到window 有存在事件捕获的绑定事件 ,则事件从window到事件源dom4 依次执行完设置为true的捕获事件 在从事件源dom到window执行完其他未设置为true的冒泡事件。//如上述代码 依次弹出 document body div2 div4 div3 div1 html window
</script>

注意:IE8及更早IE版本,Opera7.0及其更早版本不支持 addEventListener() 和 removeEventListener() 方法。

对于这类浏览器版本可以使用 attachEvent() 方法来添加事件,detachEvent() 方法来移除事件句柄

 
事件对象:在触发dom事件的时候都会产生一个事件对象
 
事件对象event:
1) type:获取事件类型
2) target:获取事件目标
3) stopPropagation():阻止事件冒泡
4) preventDefault():阻止事件默认行为
<div id="div1"> </div>
<script>var dom1 = document.getElementById('div1');dom1.addEventListener("click",function(event){console.log(event.type);console.log(event.target)})
</script>
 console.log 输出: click , <div id="div1"> </div>
<div><a></a></div>
<script>dom_div.addEventListener("click",fun_div)dom_a.addEventListener("click",fun_a)
</script>
点击a时触发fun_a 由于事件冒泡再触发fun_div  
在fun_a的末尾添加event.stopPropagation():阻止事件冒泡 则div中的click事件fun_div无效
 
<a href="http://www.baidu.com"></a>
dom_1.addEventListener("click",function(event){}) 点击之后a会跳转到百度 在回调函数function中添加event.preventDefault();阻止事件默认行为 点击之后不会跳转
 

转载于:https://www.cnblogs.com/peakleo/p/6090385.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机技巧:手机只剩20%电量?有了这几招,多用2小时

如今越来越多的小伙伴在旅途中和上班路上 免不了要用手机打发时间 看直播、打游戏、听音乐 有了手机&#xff0c;仿佛就有了全世界 可是&#xff0c;手机的电不够用怎么办&#xff1f; 不怕&#xff01; 今天小编为您送上 最强省电攻略和充电指南&#xff01; 省电攻略 iphone篇…

网络知识:电脑无线网连接不上问题汇总

在使用电脑的时候&#xff0c;有时候电脑可能连接不上无线网络。那么电脑无线网络连接不上怎么办呢?下面就让小编来告诉大家吧&#xff0c;欢迎阅读。 第一步&#xff1a;应检查无线网卡的驱动是否安装正确。 右键点击“我的电脑”-属性-硬件-设备管理器&#xff0c;查看是否存…

小W计树

排列组合思想. 先跑一遍最短路, 再从1节点开始搜索, 假如搜到一个点的路径长度等于最短路, 则记录到达该点的路径数 1. 最后遍历一遍, ans * rec[i] 输出答案即可. 关键在于想到这个排列组合的思想. #include<cstdio> #include<cstring> #include<algorith…

java jsonp 接口_jsonp使用,spring4.x对jsonp的支持

1.java中接口RequestMapping("/token/{token}")ResponseBodypublic Object getUserByToken(PathVariable String token,String callback) {Person per null;try {per userService.getPerson(token);} catch (Exception e) {e.printStackTrace();per ExceptionUtil…

CPU知识:主频、核心、线程、缓存、架构

我们都说CPU相当于人类的大脑&#xff0c;在日常生活中&#xff0c;人脑是术业有专攻&#xff0c;有人天生适合搞艺术&#xff0c;有人天生适合搞科学。CPU作为计算机的大脑&#xff0c;其实也是这样的。下面就带大家了解一下CPU知识以及怎么选择合适的CPU。 CPU有几个重要的参…

@SpringBootTest注解进行单元测试无法运行

1&#xff1a;用idea新建一个项目 2:在测试类下建一个方法&#xff0c;发现方法没法运行 查看资料之后发现是需要在对应的方面名称前面和类名前面加上public修饰符即可&#xff0c;需要测试那个方法执行哪个方法就行 3:加了 public发现可以运行了

java如何改注释_关于Java:更改字符串值的注释

在spring或java中是否有注释可以转换给定的字符串&#xff1f;例如&#xff0c;Spring具有注释Value(" some string")。 如果我想为该字符串分配一个转换后的值&#xff0c;而不是向参数/实例变量分配"某些字符串"怎么办&#xff1f; 假设字符串为" f…

视频接口:DP接口和HDMI接口介绍,看完你就懂了

目录 一、DP接口 二、HDMI接口 三、总结 1、技术支持的不同 2、带宽支持的不同 3、厂商制作成本的不同 电脑显示器高清传输通过会用到两个接口&#xff0c;就是DP接口和HDMI接口&#xff0c;今天电脑学习小编带大家对比一下这两个接口。 一、DP接口 DisplayPort缩写DP&#xff…

区间型DP

区间型DP是一类经典的动态规划问题&#xff0c;主要特征是可以先将大区间拆分成小区间求解最后由小区间的解得到大区间的解。 有三道例题 一、石子合并 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆&#xff0c;并将新…

后端:MyBatis缓存知识介绍

今天给大家分享一下MyBatis缓存知识介绍&#xff0c;希望对大家日常的开发当中能有所帮助&#xff01;一、MyBatis一级缓存1、一级缓存介绍当我们的程序MyBatis开启一次和数据库的会话&#xff0c;MyBatis会自动创建出一个SqlSession对象表示这一次数据库的会话。在同一个数据库…

软件:10款免费无广告的看图软件,总有一款适合你

目录 一、专业型看图软件 1.Windows照片 2.Honeyview 3.EzViewer 4.XnView MP 5.JPEGView 6.Irfan View 二、综合型文件查看 1.Quicklook 2.爱奇艺万能联播 3.WPS图片 4.谷歌浏览器 一、专业型看图软件 1.Windows照片 Windows自带的照片应用就是一款比较强大的看图软件&#xf…

机器学习的简单逻辑回归的Advanced Optimization

Learning Course: One variable logistic regression optimization 单变量&#xff08;只有一个特征&#xff09;的用于分类的逻辑回归的cost function的最小值求解, here: x[x1;x2]; y{0,1}; theta[theta(1);theta(2)] 由于分类中的y值需为0-1之间的数值&#xff0c;因此这里的…

java float f1=0.5_Java Math类静态float copySign(float f1,float f2)与示例

数学类float copySign(float f1&#xff0c;float f2)此方法在java.lang包中可用。此方法用于返回第一个浮点参数以及第二个浮点参数的符号。这是一个静态方法&#xff0c;因此也可以使用类名进行访问。在此方法中&#xff0c;我们传递了两个参数作为参数&#xff1a;第一个参数…

Sentinel介绍与使用

一、Sentinel简介 Sentinel是阿里开源的项目&#xff0c;提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。 二&#xff1a;Sentinel 功能和设计理念 流量控制 流量控制在网络传输中是一个常用的概念&#xff0c;它用于调整网络包的发送数据。然而…

电脑知识:BIOS和UEFI的对比介绍

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

缓存更新的套路

看到好些人在写更新缓存数据代码时&#xff0c;先删除缓存&#xff0c;然后再更新数据库&#xff0c;而后续的操作会把数据再装载的缓存中。然而&#xff0c;这个是逻辑是错误的。试想&#xff0c;两个并发操作&#xff0c;一个是更新操作&#xff0c;另一个是查询操作&#xf…

怎样获取当前页面值php,想要得到当前页面的所有url参数信息怎么用PHP来实现?...

本篇文章主要给大家介绍怎么使用php获取完整url。首先给新手小白们简单介绍下什么是url。百度百科上是这么解说的&#xff0c;统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示&#xff0c;是互联网上标准资源的地址。互联网上的每个文件都有一个唯…

@PostConstruct注解学习,最详细的分享教程

该注解可以实现在运行工程时&#xff0c;自动运行该注解下的方法&#xff1b; PostConstruct是java自带的注解&#xff0c;指的是在项目启动的时候执行这个方法&#xff0c;也可以理解为在spring容器启动的时候执行&#xff0c;可作为一些数据的常规化加载&#xff0c;比如数据…

电脑知识:分享实用的电脑维护小常识

目录 常识1&#xff1a;杜绝直接拔电脑电源强行关机 常识2&#xff1a;不要用电池玩游戏 常识3&#xff1a;开不了机可以尝试插拔内存条 常识4&#xff1a;电脑散热的处理方法 常识5&#xff1a;避免在电脑工作时拔插头 今天小编就为大家带来一些电脑日常实用中的维护小知识&am…