事件

932 字
5 分钟
事件

HTML 事件是发生在 HTML 元素上的事情。

当在 HTML 页面中使用 JavaScript 时, JavaScript 可以触发这些事件。

事件的冒泡#

事件的冒泡(Bubble)

  • 所谓的冒泡指的就是事件的向上传导,当后代元素上的事件被触发时,其祖先元素的相同事件也会被触发
  • 在开发中大部分情况冒泡都是有用的,如果不希望发生事件冒泡可以通过事件对象来取消冒泡
    • 可以将事件对象的 cancelBubble 设置为true,即可取消冒泡,这个需要设置在子元素的事件中,并且大多数都是设置的可以冒泡,除了某些函数默认不冒泡 event.cancelBubble = true;

如果在父元素里面设置了一个事件,而在子元素中也有相同的事件,不想要父元素的事件在子元素的范围内出现时,可以通过多种方式设置取消冒泡

  1. event.cancelBubble = true
  2. event.stopPropagation();

事件的委派#

  • 指将事件统一绑定给元素的共同的祖先元素,这样当后代元素上的事件触发时,会一直冒泡到祖先元素,从而通过祖先元素的响应函数来处理事件。
  • 事件委派是利用了冒泡,通过委派可以减少事件绑定的次数,提高程序的性能

例: 为每一个超链接都绑定一个单击响应函数,这里我们为每一个超链接都绑定了一个单击响应函数,这种中操作比较麻烦,而且这些操作只能为已有的超链接设置事件,而新添加超链接必须重新绑定

//获取所有的a
var allA = document.getElementsByTagName("a");
//遍历
for(var i=0 ; i<allA.length ; i++){
allA[i].onclick = function(){
alert("我是a的单击响应函数!");
};
}

我们希望,只绑定一次事件,即可应用到多个元素上,即使元素是后添加的,我们可以尝试将其绑定给元素的共同的祖先元素

//假设所以的a元素都是由一个父元素包裹,获取a的父元素
var parent=document.getElementById("parent");
//为a的父元素绑定事件
parent.onclick=function(){
alert("我是a的单击响应函数!");
}

12345但是这个例子需要判断如果触发的对象是我们期望的元素,就执行该代码,否则不执行,因为如果点击的是a元素之外的其它地方就不触发弹窗效果,这个时候需要使用target 事件对象中的event中的target表示的触发事件的对象

parent.onclick=function(event){
event=event||window.event;
if(event.target.nodeName==="A"){ //nodeName返回的标签名全为大写
alert("我是a的单击响应函数!");
}
}

事件的绑定#

绑定事件#

  • 使用 对象.事件 = 函数 的形式绑定响应函数,它只能同时为一个元素的一个事件绑定一个响应函数,不能绑定多个,如果绑定了多个,则后边会覆盖掉前边的

  • 使用addEventListener() (不支持IE8)可以同时为一个元素的相同事件同时绑定多个响应函数,这样当事件被触发时,响应函数将会按照函数的绑定顺序执行

    • 参数: 1.事件的字符串,不要on (onclick -> click) 2.回调函数,当事件触发时该函数会被调用 3.是否在捕获阶段触发事件,需要一个布尔值,true表示事件在捕获阶段执行,flase表示在冒泡阶段执行,默认值为false(可选),如果想要这两个事件都可以在同一个对象上发生必须添加两次事件

      btn.addEventListener("click",function(){
      alert(1);
      },false);
      btn.addEventListener("click",function(){
      alert(2);
      },false);

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

事件
https://sukksa.github.io/posts/shi-jian/
作者
Sukksa
发布于
2021-10-16
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
事件对象
DOM当事件的响应函数被触发时,浏览器每次都会将一个事件对象作为实参传递进响应函数,在事件对象中封装了当前事件相关的一切信息,比如:鼠标的坐标,键盘哪个按键被按下,鼠标滚轮滚动的方向...
2
DOM介绍
DOMDOM全称Document Object Model(文档对象模型) 文档:整个HTML网页文档对象 对象:网页中的每一个部分都被转换为了一个对象 模型:使用模型表示对象之间的关系,方便我们获取对象
3
jQuery轮播图
实战功能说明: 1. 点击向右(左)的图标, 平滑切换到下(上)一页 2. 无限循环切换: 第一页的上一页为最后页, 最后一页的下一页是第一页 3. 每隔3s自动滑动到下一页 4. 当鼠标进入图片区域时, 自动切换停止, 当鼠标离开后,又开始自动切换 5. 切换页面时, 下面的圆点也同步更新 6. 点击…
4
react-hooks
reactReact 的核心是组件。v16.8 版本之前,组件的标准写法是类(class)。 任何一个组件,可以用类来写,也可以用钩子来写。下面是类的写法。 再来看钩子的写法,也就是函数。 官方推荐使用钩子(函数),而不是类。因为钩子更简洁,代码量少,用起来比较"轻",而类比较"重"。而且,钩子是函数,更符合…
5
关于 cesium 在 micro-app 下无法显示的问题
cesium基座:vite + vue3 子应用:vite + vue3 micro app v1.0.0 rc.29, cesium v1.135 子应用包含一个 cesium map,在基座打开子应用时,cesium 无法显示地图,但是 sence, sky box, model 都能正常显示,唯独地图不显…
随机文章随机推荐
Profile Image of the Author
Sukksa
记录前端学习与日常
公告
博客刚刚上线,内容还在慢慢补齐。欢迎随便逛逛~
分类
标签
最新动态
站点统计
文章
69
分类
16
标签
17
总字数
178,517
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录