JS阻止事件冒泡行为和闭包的方法

JS阻止事件冒泡行为

在JavaScript中,事件冒泡指的是当子元素触发一个事件时,这个事件将沿着DOM树向它的祖先元素传播,直到被处理或到达文档根。有时候,我们需要阻止事件的冒泡传递,这时可以使用以下两种方法:

  1. stopPropagation()方法

stopPropagation()是用来停止事件在DOM层次中进一步传播的方法。当调用stopPropagation()方法时,事件将会被阻止传播,但仍可在当前元素上触发。

<div id="parent">
  <button id="child">Click me</button>
</div>
<script>
const parent = document.getElementById('parent');
const child = document.getElementById('child');
child.addEventListener('click', (event) => {
  alert('Child clicked');
  event.stopPropagation();
});
parent.addEventListener('click', () => {
  alert('Parent clicked');
});
</script>

在上面的代码中,点击按钮时,会弹出“Child clicked”,但不会弹出“Parent clicked”。

  1. 使用事件处理程序的事件对象参数

在事件处理程序中,我们可以通过事件对象来判断事件是否要冒泡。如果事件需要停止冒泡,可以使用事件对象的stopPropagation()方法。

<div id="parent">
  <button id="child">Click me</button>
</div>
<script>
const parent = document.getElementById('parent');
const child = document.getElementById('child');
child.addEventListener('click', (event) => {
  alert('Child clicked');
  event.stopPropagation();
});
parent.addEventListener('click', (event) => {
  if (!event.isPropagationStopped()) {
    alert('Parent clicked');
  }
});
</script>

在这个例子中,我们在父元素的事件处理程序中,通过event.isPropagationStopped()方法来检查事件是否停止了冒泡。如果没有停止冒泡,才会弹出“Parent clicked”。

闭包

闭包是指有权访问另一个函数作用域内变量的函数。在JavaScript中,函数作用域可以是全局作用域、函数作用域或块级作用域。

使用闭包有以下的好处:

  1. 可以访问外部函数的局部变量

  2. 可以将函数作为参数传递到另一个函数中

  3. 可以将函数作为返回值返回

以下是一个闭包的示例:

function outerFunction() {
  const name = 'David';
  function innerFunction() {
    console.log(name);
  }
  return innerFunction;
}

const inner = outerFunction();
inner(); // 输出'David'

在上面的代码中,innerFunction是一个闭包,内部可以访问外部函数outerFunction中的局部变量name。

另一个闭包的示例是将函数作为参数传递到另一个函数中:

function sayHello(name) {
  return function() {
    console.log(`Hello ${name}`);
  };
}

const sayBob = sayHello('Bob');
const sayAlice = sayHello('Alice');
sayBob(); // 输出'Hello Bob'
sayAlice(); // 输出'Hello Alice'

在这个例子中,sayHello函数返回一个函数,内部可以访问外部函数中的name变量。我们可以将这个函数作为参数传递到另一个函数中,以实现更复杂的操作。

总结

在JavaScript中,使用stopPropagation()方法和事件处理程序的事件对象参数可以阻止事件的冒泡传递。使用闭包可以访问外部函数的局部变量,并将函数作为参数传递到另一个函数中,实现更复杂的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS阻止事件冒泡行为和闭包的方法 - Python技术站

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

相关文章

  • pnpm 之降本增效

    作者:京东科技 于振京 受众简介 前端研发工程师 还在为npm i安装大量依赖等待时间较长,npm扁平化node_modules依赖版本冲突在苦恼吗,不用苦恼pnpm为你保驾护航 主要影响:安装依赖包的过程,假如使用的是npm install会根据package-lock.json进行软件包的安装,如果没有package-lock.json会根据packag…

    JavaScript 2023年4月17日
    00
  • 微信小程序实现自定义底部导航

    实现微信小程序自定义底部导航需要经过以下步骤:1. 在app.json文件中定义底部导航栏2. 创建对应的底部导航栏页面3. 在底部导航栏页面中引用相应的子页面4. 最后,在各自页面中添加导航栏的相应内容,如背景色、图标及文字等。 下面来看一下具体的实现步骤以及示例。 步骤一: 在app.json文件中定义底部导航栏 在app.json文件中定义tabBar…

    JavaScript 2023年6月11日
    00
  • ECMAScript6快速入手攻略

    下面是“ECMAScript6快速入手攻略”的完整攻略: 什么是ECMAScript6? ECMAScript6是JavaScript的一种新版本,也称为ECMAScript2015。它是一种相对于ES5更先进且功能更强大的脚本语言,它改进了很多的语法。它不是一种新的语言,而是JavaScript的下一代标准。 如何使用ECMAScript6? 要开始使用E…

    JavaScript 2023年6月11日
    00
  • 积累比较常用的正则表达式(例如:匹配中文、匹配html)

    Markdown格式的文本有一些基本规则。比如,使用#、##、###等#符号表示章节标题,使用*、-、+等符号表示无序列表,使用>符号表示引用等。下面,我将详细讲解“积累比较常用的正则表达式”的攻略: 1. 正则表达式基础 正则表达式是用来匹配字符串及其组成部分的一种模式化方法。正则表达式主要包括以下几个元素:1. 原义字符:表示字符本身,如a表示字母…

    JavaScript 2023年6月10日
    00
  • JS中的构造函数详细解析

    我来为您讲解一下JS中的构造函数详细解析的完整攻略: 什么是构造函数 构造函数是一种特殊类型的函数,用于创建对象。它通过 new 关键字来实例化对象,并自动添加到对象的 prototype 属性中。每个对象都有一个 constructor 属性,该属性指向创建该对象的构造函数。 下面是一个简单的示例: function Person(name, age) {…

    JavaScript 2023年5月27日
    00
  • js substring()字符串截取函数

    当我们需要对字符串进行截取,只保留某一段字符时,可以使用js的字符串截取函数 substring(). 以下是详细的使用攻略: 函数语法 str.substring(start, end) 参数: start: 表示从哪个位置开始截取,包括这个位置。 end: 表示截取到哪个位置结束, 不包括这个位置 。如果省略,则截取到字符串的末尾。 返回值: 返回截取出…

    JavaScript 2023年5月28日
    00
  • 深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例

    深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例 在JavaScript中,编码与解码字符串是非常常见的操作。对于URL、HTML等特殊字符的处理,我们通常会使用escape()、encodeURI()、encodeURIComponent()这几个函数,它们虽然都是编码函数,但是处理的范围和方式各不相同…

    JavaScript 2023年5月19日
    00
  • JavaScript中获取HTML元素值的三种方法

    当我们在编写 JavaScript 代码时,常常需要获取 HTML 元素的值。下面介绍三种常见的方法来获取 HTML 元素的值。 1. 使用 document.getElementById() 方法 document.getElementById() 方法是用来获取指定 id 的元素的,然后我们可以使用 value 属性获取元素的值。示例代码如下: // H…

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