js事件冒泡、事件捕获和阻止默认事件详解

JS事件冒泡、事件捕获和阻止默认事件

事件冒泡

事件冒泡是指当一个元素触发了某个事件时,该事件会从子元素一直冒泡到祖先元素。例如,当一个按钮被点击时,点击事件会首先被触发,然后该事件会向外冒泡,一直到文档根节点才停止。

事件捕获

事件捕获是指当一个元素触发了某个事件时,该事件会从祖先元素一直捕获到子元素。例如,当一个按钮被点击时,点击事件会从文档根节点开始捕获,直到被点击的按钮才停止。

阻止默认事件

有些元素会有默认的事件行为,例如a标签的点击会跳转页面,表单的提交会刷新页面等。为了防止这些默认行为发生,我们可以使用preventDefault()方法来中止默认事件的执行。例如,当点击一个a标签时,可以使用以下代码防止跳转:

document.querySelector('a').addEventListener('click', function(event) {
  event.preventDefault();
});

事件流模型

事件流模型分为两种:捕获型事件流和冒泡型事件流。在捕获型事件流中,事件首先从最外层的祖先元素被捕获,接着沿着树形结构依次触发,最后到达目标元素;在冒泡型事件流中,事件首先从目标元素开始,沿着树形结构依次向上冒泡,最终到达祖先元素。默认情况下,所有的事件都是冒泡型事件流。

示例一:事件冒泡

<body>
  <div id="grandparent">
    <div id="parent">
      <div id="child"></div>
    </div>
  </div>
</body>
document.querySelector('#grandparent').addEventListener('click', function(){
  console.log('Grandparent clicked');
});

document.querySelector('#parent').addEventListener('click', function(){
  console.log('Parent clicked');
});

document.querySelector('#child').addEventListener('click', function(){
  console.log('Child clicked');
});

当点击child元素时,依次输出“Child clicked”,“Parent clicked”和“Grandparent clicked”。

示例二:阻止默认事件

<body>
  <a href="http://www.baidu.com">点击跳转</a>
</body>
document.querySelector('a').addEventListener('click', function(event){
  event.preventDefault();
  console.log('Link clicked, but default behavior prevented');
});

当点击a标签时,阻止了跳转并输出“Link clicked, but default behavior prevented”。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js事件冒泡、事件捕获和阻止默认事件详解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 举例讲解JavaScript中将数组元素转换为字符串的方法

    JavaScript中将数组元素转换为字符串的方法 在JavaScript中,将数组元素转换为字符串是很常见的操作。下面我们来详细讲解一下如何将数组元素转换为字符串。 1. 使用Array.join()方法 我们可以使用数组的join方法将数组转换为字符串。该方法将数组的所有元素转换为一个字符串,元素之间用指定的分隔符连接。语法如下: array.join(…

    JavaScript 2023年5月28日
    00
  • js实现公告自动滚动

    当我们在网站中需要展示一些公告信息时,如果公告内容比较多,可以通过实现公告自动滚动来达到更好的展示效果。下面是 JS 实现公告自动滚动的完整攻略。 步骤 1. 准备 HTML 结构 首先需要在 HTML 中定义公告的容器和公告内容的列表,如下所示: <div class="notice"> <ul> <li&…

    JavaScript 2023年6月11日
    00
  • JavaScript获取当前网页最后修改时间的方法

    获取当前网页最后修改时间是一个常见的需求,可以通过JavaScript来实现。下面是一个完整的攻略,包括两条示例说明。 方法一:通过document.lastModified属性获取 每个HTML文档都有一个默认的document对象。document.lastModified属性可以返回当前网页最后修改时间,返回的是一个字符串类型的时间戳。 let las…

    JavaScript 2023年5月27日
    00
  • 让你一句话理解闭包(简单易懂)

    下面是关于如何让你一句话理解闭包的完整攻略: 一句话理解闭包 闭包是由函数和其相关的引用环境组合而成的封装体,它可以让函数访问到其词法作用域链上层的变量。 详细解释 首先,我们需要了解什么是词法作用域,以及JavaScript是如何处理作用域的。词法作用域就是在词法分析阶段确定的变量作用域,也就是说,变量的作用域是由函数定义时所在的位置决定的。 比如下面这段…

    JavaScript 2023年6月10日
    00
  • JavaScript Array.flat()函数用法解析

    JavaScript Array.flat()函数用法解析 Array.flat()是JavaScript中一个新的数组API,用于将嵌套数组“展平”,即从多维数组变成一维数组。本文将详细讲解Array.flat()函数的用法。 语法 let newArray = arr.flat(depth) arr:被展平的原数组。 depth(可选):表示展平的深度,…

    JavaScript 2023年5月27日
    00
  • js学习总结之DOM2兼容处理重复问题的解决方法

    js学习总结之DOM2兼容处理重复问题的解决方法 1. 什么是DOM2兼容问题 在早期浏览器中,对于DOM(文档对象模型)的实现存在很大差异。其中一个最明显的差异是很多浏览器不支持DOM2规范。在这种情况下,我们使用JavaScript操作DOM时会遇到一些兼容性问题,比如不能使用document.getElementById()方法获取DOM元素。 2. …

    JavaScript 2023年6月10日
    00
  • js中关于String对象的replace使用详解

    String对象的replace方法是JavaScript中用于替换字符串中指定字符或字符串的方法。该方法可以接受一个正则表达式或字符作为第一个参数,并将其替换成给定的字符串。以下是关于该方法的详细讲解: 基本语法 replace方法的基本语法如下: string.replace(searchValue, replaceValue); 其中,string 是…

    JavaScript 2023年5月27日
    00
  • 详解React中的this指向

    当使用React构建应用程序时,使用this来引用组件实例中的属性和方法可能会变得稍微复杂。在React组件中,this的值可能是 null、 undefined 或指向其他对象。这可能会导致执行时错误或行为不一致的情况出现。 为什么this指向会变化? React组件的 this 值会受到许多因素的影响,主要有以下原因: 在类方法中,this 默认指向组件…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部