stopPropagation/prevent链接内元素的默认行为

2024-04-26

我试图理解当 a 中的元素出现时的行为<a> have a event.stopPropagation() or event.preventDefault().

在第一种情况下,单击<div>还触发了<a>事件,将其移动到另一个页面。event.stopPropagation()没有影响。

如果我改变event.stopPropagation() to event.preventDefault(),当点击div时,控制台记录"div", the <a>不会触发任何事件,但复选框停止工作。所以event.preventDefault()影响子元素。

我在这里缺少什么?

.html

<a href="#" target="_blank">
  <div>
    <input type="checkbox"/>
  </div>
</a>

.js

var div = document.querySelector('div');

div.addEventListener('click', function(event) {
  event.stopPropagation();
  // event.preventDefault(); # second case
  console.log('div');
});

.css(只是为了更容易在屏幕上看到)

a {
  display: block;
  background: black;
  width: 300px;
  height: 100px;
}

div {
  background: red;
  width: 50px;
  height: 50px;
}

event.preventDefault()将阻止 href 和复选框触发其默认事件,因为它是冒泡事件。

“当事件被分派到参与树的对象(例如元素)时,它也可以到达该对象祖先上的事件侦听器。首先,按树顺序调用捕获变量设置为 true 的所有对象的祖先事件侦听器.其次,调用对象自己的事件侦听器。最后,只有当事件的 bubbles 属性值为 true 时,才会再次调用对象的祖先事件侦听器,但现在以相反的树顺序。” -https://dom.spec.whatwg.org/#dom-event-preventdefault https://dom.spec.whatwg.org/#dom-event-preventdefault

When you use event.stopPropagation() you are preventing any parent (or child if bubbling = true) from being notified of it's event. This will not prevent it's default event from being fired.

要检查事件是否正在冒泡,您可以使用var x = event.bubbles; console.log(x);

edit: here's an example of how to use event.preventDefault() and event.stopPropagation() in conjunction -

var div = document.querySelector('div');
var a = document.querySelector('a');
a.addEventListener('click', function(event){
    event.preventDefault();
});
div.addEventListener('click', function(event) {
  event.stopPropagation();
  console.log('div');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" target="_blank">
  <div>
    <input type="checkbox"/>
  </div>
</a>

这将阻止附加到的点击事件<a>从达到任何超越<div>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stopPropagation/prevent链接内元素的默认行为 的相关文章

随机推荐

  • React Native 中组件之间的导航

    我需要在 React Native 的两个视图之间导航 但问题是我的组件 其中导航按钮位于其他组件上 我使用反应导航 我来给你展示 我在这里有我的组件 MainPage class MainPage extends Component re
  • 查找 NumPy 数组中到最近零的距离

    假设我有一个 NumPy 数组 x np array 0 1 2 0 4 5 6 7 0 0 在每个索引处 我想找到到最接近的零值的距离 如果位置本身为零 则返回零作为距离 之后 我们只对到当前位置右侧最接近的零的距离感兴趣 超级天真的方法
  • 选择选项“selected”属性

    我这里脑子一片空白 基本上我所做的是创建一个迷你文章管理器 每篇文章都可以分配到在选择下拉列表中定义的以下类别之一 Design 发展 Other 当我去编辑一篇文章时 我从数据库中检索了数据并填充了输入和文本区域 我现在想做的是应用sel
  • AWS 签名的 URL 太长,无法缩短

    我正在使用 AWS 创建一个签名 URL 以便我可以安全地将此 URL 传递给另一个 API 以供临时使用 签名的 URL 指向 S3 资源 问题是其他 API 不接受这么长的链接 因此我正在尝试缩短它 我尝试使用类似的缩短器goo gl
  • Android Studio 音乐播放器无法从 SD 卡读取,只能读取内存

    如果这被证明是一个愚蠢的问题 我深表歉意 这可能是一个快速解决方案 但我就是无法弄清楚 我正在 android studio 中构建一个音乐播放器 尽管我确实实现了 getExternalStorageDirectory 并在清单文件中添加
  • Shutterfly 订单 API 。

    我找到了这个网站 http www shutterfly com documentation api OrderImage sfly http www shutterfly com documentation api OrderImage
  • 在 Hedera 区块链中创建智能合约时出现错误“Transaction Oversize”

    我的 bin 文件大小只有 18kb 我还得到了使用 IPFS 的解决方案 但不知道如何使用它 如果有任何使用 IPFS 的参考 请分享给我 错误 PrecheckStatusError 交易 电子邮件受保护 cdn cgi l email
  • IPython Notebook 中的“斑马表”?

    我正在 IPython 中使用用于交互式分析的出色 Notebook 和 Pandas 构建一些交互式工作流程 我显示的一些表格通过一些格式化会更容易阅读 我真的很喜欢像 斑马桌 这样的东西 每隔一行都有阴影 我在这里读 http dev
  • 实体框架代码首先将同一类型的多个复杂类型映射到一个表

    如果您有以下域模型 public class Test public string Description get set public TestB A get set public TestB B get set public TestB
  • BouncyCastle 安装问题

    我正在尝试将 BouncyCastle 添加为 Windows XP Pro 上的安全提供程序 以便我可以根据说明使用它向 Android 应用程序添加一些证书here http blog crazybob org 2010 02 andr
  • Nvcc 的版本与 CUDA 不同

    我安装了 cuda 7 但是当我点击 nvcc version 时 它打印出 6 5 我想在 GTX 960 卡上安装 Theano 库 但它需要 nvcc 7 0 我尝试重新安装cuda 但它没有更新nvcc 当我运行 apt get i
  • Spring Rest api 过滤响应中的字段

    我正在使用 spring Rest api 4 x 我们有一个需求 根据请求参数过滤响应中的字段 我的用户对象 private class UserResource private String userLastName private S
  • 如何以编程方式从 Google 云端硬盘中的“与我共享”中删除文件

    在完整驱动器范围内执行以下命令 var request service Files Delete fileId 结果是 权限不足错误 尝试从 Google 云端硬盘 与我共享 文件夹中删除文件时 当登录的用户实际上无权删除不属于他们的文件时
  • Android 退出全屏后嵌入式 IFRAME 视频继续在后台播放

    我已经搜索了很多解决这个问题的方法 但显然我找不到 嗯 顾名思义 我有一个简单的 Android 应用程序 它有一个 Webview public class MainActivity extends Activity protected
  • 使用 apache poi 读取 .xlsx 文件在 Linux 机器上给出 org.apache.poi.POIXMLException

    我有一个应用程序读取 xlsx 文件并向用户显示内容 该应用程序在 Windows 环境下运行良好 我在 ubuntu 服务器上的 tomcat6 上部署了此 Web 应用程序的 war 文件 我还将 xlsx 文件复制到服务器上 代码中的
  • 这是什么错误:位于 com.google.common.base.Preconditions.checkNotNull

    我是一名新的自动化测试人员 正在处理示例测试脚本 需要你们的一些帮助 我尝试过使用 POM 和基本的 TestNG 我创建了 2 个包 页面和测试用例 当我尝试从我的页面包访问 ClickJoin Enterusername 方法时 出现一
  • 如何将对象转换为 Action

    我创建了一个简单的消息总线 用于排队和发出 发布事件 我正在使用 StructureMap 来定位注册的处理程序 Action
  • 在 n log n 时间内打乱链表的算法

    我正在尝试使用分治算法对链表进行洗牌 该算法以线性 n log n 时间和对数 log n 额外空间随机洗牌链表 我知道我可以进行类似于在简单的值数组中使用的 Knuth 洗牌 但我不确定如何通过分而治之来做到这一点 我的意思是 我实际上在
  • 将现有 MongoDB 字符串属性转换为 BSON::ObjectId

    我在 MongoDB 中有一个文档集合 其中有一个属性被存储为字符串 如果将其保存为 BSON ObjectId 会更好 集合名称是foo该字段称为bar 拥有每个领域的最佳方式是什么bar将其现有值转换为 BSON ObjectId 的实
  • stopPropagation/prevent链接内元素的默认行为

    我试图理解当 a 中的元素出现时的行为 a have a event stopPropagation or event preventDefault 在第一种情况下 单击 div 还触发了 a 事件 将其移动到另一个页面 event sto