JS 循环li添加点击事件 (闭包的应用)

yizhihongxing

JS 循环li添加点击事件(闭包的应用)攻略

在 Web 前端开发中,经常需要对列表中的每一项元素进行操作,可是一般的循环添加事件时会出现事件函数中变量值不符合预期的问题。这时候,就需要用到闭包的思想。以下是实现思路和代码示例。

实现思路

  1. 找到列表元素的父级元素
  2. 找到列表元素,可以通过 querySelectorAll 来找到(或者使用 children
  3. 遍历列表元素,利用闭包来绑定 click 事件并保存索引

代码示例一

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>JS 循环li添加点击事件(闭包的应用)</title>
  </head>
  <body>
    <ul id="list">
      <li>item 1</li>
      <li>item 2</li>
      <li>item 3</li>
      <li>item 4</li>
      <li>item 5</li>
    </ul>
    <script>
      const list = document.querySelector("#list");
      const items = list.querySelectorAll("li");

      for (let i = 0; i < items.length; i++) {
        (function (index) {
          items[index].addEventListener("click", function () {
            console.log("you clicked item ", index + 1);
          });
        })(i);
      }
    </script>
  </body>
</html>

代码解析:

首先使用 querySelector 方法找到了 <ul> 元素,然后使用 querySelectorAll 方法找到所有 <li> 子元素。在循环添加事件函数时,在闭包中使用 let 声明变量将索引保存下来,并在事件函数中使用该索引值。

代码示例二

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>JS 循环li添加点击事件(闭包的应用)</title>
  </head>
  <body>
    <ul id="list">
      <li>item 1</li>
      <li>item 2</li>
      <li>item 3</li>
      <li>item 4</li>
      <li>item 5</li>
    </ul>
    <script>
      const list = document.querySelector("#list");
      const items = list.querySelectorAll("li");

      items.forEach(function (item, index) {
        item.addEventListener("click", function () {
          console.log("you clicked item ", index + 1);
        });
      });
    </script>
  </body>
</html>

代码解析:

使用 querySelectorquerySelectorAll 找到 <ul><li> 元素,然后使用 forEach 方法简化循环添加事件函数过程。在 forEach 传入的回调函数中,第二个参数就是当前元素的索引值,直接可以使用该变量。

总结

使用闭包的方式可以有效地解决循环添加事件函数时变量值不符合预期的问题,方便开发和维护。而 ES6 中提供的 forEach 方法则可以简化循环操作过程,使用灵活。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS 循环li添加点击事件 (闭包的应用) - Python技术站

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

相关文章

  • 一文了解什么是TypeScript?

    一文了解什么是TypeScript? 什么是TypeScript? TypeScript 是一种由微软开发和维护的自由和开源的编程语言,是 JavaScript 的一个超集,在 JavaScript 基础上添加了静态类型和其他特性。TypeScript 在许多方面都可以增强 JavaScript 的能力,并且还可以提高代码的可读性和可维护性。 TypeScr…

    JavaScript 2023年5月28日
    00
  • element-ui表格合并span-method的实现方法

    下面是”element-ui表格合并span-method的实现方法 “的完整攻略。 1. 简介 在使用 Element UI 表格组件时,经常遇到需要对表格进行合并单元格的操作。Element UI 表格提供了 span-method 方法来实现单元格合并,可以按行或列进行合并。span-method 方法的作用是在表格初始渲染和数据更新时对单元格进行合并…

    JavaScript 2023年6月10日
    00
  • JavaScript定时器setTimeout、setInterval使用详解

    JavaScript定时器setTimeout、setInterval使用详解 在 JavaScript 中,定时器是一种非常有用的功能,它可以让你在一定时间后执行一些操作。其中,setTimeout 和 setInterval 是两种最常用的定时器,本文将详细解释它们的使用方法。 setTimeout setTimeout 函数可以让你在指定的时间后执行一…

    JavaScript 2023年6月11日
    00
  • P3P 和 跨域 (cross-domain) cookie 访问(读取和设置)

    P3P(Platform for Privacy Preferences)是一个Internet标准,它在Web服务器和浏览器之间传递标准格式的隐私策略。P3P帮助网站明确并公开其隐私政策,并允许用户在浏览网站时了解网站将如何使用其个人信息。跨域cookie指的是在某个域名下,通过设置cookie使得另一个域名下的网站也可以共享这个cookie,即跨域共享c…

    JavaScript 2023年6月11日
    00
  • javascript如何返回字符串的所有排列

    要返回一个字符串的所有排列,可以使用递归和回溯的方法。下面的代码展示了如何实现这个功能: function permutations(input) { const str = input.split(""); const results = []; function permute(arr, memo = []) { if (arr.le…

    JavaScript 2023年5月28日
    00
  • js按指定格式显示日期时间的样式代码

    下面我将详细讲解如何用 JavaScript 按指定的格式显示日期时间样式的代码攻略。 1. 获取当前的日期和时间 在编写代码显示日期和时间之前,我们需要先获取当前的日期和时间信息。这个过程可以通过 JavaScript 的内置对象 Date 来实现,如下所示: var now = new Date(); 这里定义了一个名为 now 的变量,并通过 new …

    JavaScript 2023年5月27日
    00
  • JavaScript+HTML5实现的日期比较功能示例

    这篇攻略将向您介绍如何使用JavaScript和HTML5技术实现日期比较功能。我们会分别针对两种不同的日期比较场景,提供详细的示例说明。 1. 场景一:比较两个日期之间的天数差 在许多场景下,需要计算两个日期之间相隔的天数差,比如在开发借还书管理系统时,需要计算借书日期到还书日期之间的天数差。下面的示例代码将演示如何实现这一功能。 1.1 HTML代码 &…

    JavaScript 2023年5月27日
    00
  • 详解js 创建对象的几种方法

    详解JS创建对象的几种方法 在JS中,我们经常需要创建各种各样的对象,如何更好地创建对象呢?下面让我们来一步步详解几种JS创建对象的方法。 1. 对象字面量 对象字面量是JS最简单的创建对象的方法。 let obj = { name: "Tom", age: 18, sayHi: function() { console.log(&quo…

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