real跟你侃代码 - 聊聊 e.stopPropagation与e.preventDefault

简介

e.stopPropagation()是一个事件对象的方法,用于停止事件的进一步传播。当在事件处理程序中,调用e.stopPropagation()时,它会阻止事件继续向上层元素进行冒泡或下层元素进行捕获。

在给定的代码中,e.stopPropagation() 被用于阻止 onKeyDown 事件的进一步传播。具体来说,在按下键盘的Enter键时,通过调用e.stopPropagation(),事件不会继续向上层元素传播,这意味着其他包含输入框的父元素不会收到相同的事件。

这样做的目的是为了在按下Enter键时防止触发其他可能与输入框无关的事件或处理程序。通过阻止事件传播,可以确保按下Enter键只会触发输入框相关的事件(例如调用 handleValue()),而不会触发其他意外的行为。 需要注意的是,e.stopPropagation() 只阻止事件的传播,而不会阻止事件的默认行为。如果还需要阻止行为,例如,阻止表单提交),可以在 onKeyDown 事件处理程序中添加 e.preventDefault()

javascript 复制代码
onKeyDown={(e: any) => {
  if (e.keyCode === KeyCode.Enter) {
    e.stopPropagation();
    e.preventDefault(); // 阻止默认行为,如表单提交
    ref.current?.blur?.();
    handleValue();
  }
}}

这样做可以确保在按下 Enter 键时只触发所需的操作,并防止其他意外的行为发生。

应用场景

e.stopPropagation()e.preventDefault() 方法在事件处理中有以下应用场景:

e.stopPropagation() 的应用场景:

  1. 阻止事件冒泡 : 当一个元素触发了某个事件,例如点击事件,该事件会一直向上层元素冒泡,直到达到文档根节点。通过调用 e.stopPropagation() 可以阻止事件继续向上层元素传播,使其只在当前元素上触发,不影响其他元素。这在需要限制事件范围或避免冲突的情况下很有用。

  2. 组织事件委托 : 事件委托是指将事件处理程序绑定在父元素上,通过事件冒泡机制来处理子元素的事件。如果希望某个特定的子元素不触发事件委托,可以在子元素的事件处理程序中调用 e.stopPropagation(),以阻止事件继续向上层元素传播,从而避免被委托的处理程序执行。

e.preventDefault() 的应用场景:

  1. 阻止默认行为 : 某些元素在触发特定事件时会有默认的行为。例如,点击 <a> 标签时会跳转到链接的 URL,提交表单时会刷新页面。通过调用 e.preventDefault(),可以阻止元素触发默认行为,从而在需要自定义行为或防止页面刷新的情况下使用。

  2. 处理自定义交互 : 在一些自定义交互场景中,可以利用 e.preventDefault() 来阻止默认行为,并根据事件的具体情况执行自定义的交互逻辑。例如,通过捕捉拖放事件并阻止默认行为,可以实现自定义的拖放操作。

需要注意的是,在使用这两个方法时,应根据具体需求和场景进行慎重使用。过度使用或错误使用这些方法可能导致意外行为或阻止本应执行的功能。确保清楚理解这两个方法的作用和影响,并根据实际需求正确地应用它们。

小结

本周是8月的最后一周,马上到9月了,有的时候会非常的怅然,感觉每天都在在忙碌,自己好似进步了,又好似在原地踏步。希望上天保佑努力奋斗的孩子。🥤🦋

相关推荐
猪八戒1.013 分钟前
onenet接口
开发语言·前端·javascript·嵌入式硬件
程序猿小蒜15 分钟前
基于Spring Boot的宠物领养系统的设计与实现
java·前端·spring boot·后端·spring·宠物
合作小小程序员小小店16 分钟前
web网页开发,在线%食堂管理%系统,基于Idea,html,css,jQuery,java,ssm,mysql。
java·前端·mysql·html·intellij-idea·jquery
人工智能训练28 分钟前
Windows中如何将Docker安装在E盘并将Docker的镜像和容器存储在E盘的安装目录下
linux·运维·前端·人工智能·windows·docker·容器
90后小陈老师39 分钟前
用户管理系统 07 项目前端初始化 | 新手实战 | 期末实训 | Java+SpringBoot+Vue
java·前端·spring boot
小溪彼岸44 分钟前
一键切换Cluade、Codex供应商配置,CC Switch你值得一试
前端
2501_916008891 小时前
API接口调试全攻略 Fiddler抓包工具、HTTPS配置与代理设置实战指南
前端·ios·小程序·https·fiddler·uni-app·webview
Halo_tjn1 小时前
Set集合专项实验
java·开发语言·前端·python
m0_564914921 小时前
EDGE浏览器如何在新标签页打开收藏?EDGE浏览器如何打开书签不覆盖原网页?如何默认在新建标签页打开收藏夹书签?
前端·edge
司铭鸿1 小时前
图论中的协同寻径:如何找到最小带权子图实现双源共达?
linux·前端·数据结构·数据库·算法·图论