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

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日

相关文章

  • nodejs中使用worker_threads来创建新的线程的方法

    下面详细讲解如何在Node.js中使用worker_threads模块来创建新线程。 简介 在Node.js中,JavaScript语言具有单线程执行的特性,这意味着如果主线程执行某些任务时,会阻塞其他任务的执行进度,导致性能瓶颈。因此,可以使用worker_threads模块创建新线程,实现多线程执行任务的目的。Worker对象执行的代码并不在主线程中运行…

    JavaScript 2023年5月28日
    00
  • js解析与序列化json数据(二)序列化探讨

    JS解析与序列化JSON数据(二) – 序列化探讨 什么是序列化? 序列化是指将对象(Object)、数组(Array)等复杂的数据类型转换成字符串的过程,方便在不同平台上的传输和存储。在JavaScript中,序列化的主要应用是在数据传输和存储时,将复杂的数据类型转换为字符串,再通过反序列化,将字符串转回原来的数据类型。 序列化方法 JavaScript中…

    JavaScript 2023年5月27日
    00
  • JSON键值对序列化和反序列化解析

    什么是JSON键值对序列化和反序列化 JSON是一种轻量级的数据交换格式,由于其易于阅读和编写的特性,被广泛用于web应用程序中的数据传输。在JSON中,使用键值对表示数据,所以JSON序列化就是将键值对转换为字符串,而JSON反序列化就是将字符串转换为键值对。 JSON的序列化 JSON序列化可以使用JSON.stringify()方法实现。它将Javas…

    JavaScript 2023年5月27日
    00
  • 浅析JSON序列化与反序列化

    浅析JSON序列化与反序列化 JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。 JSON格式的数据结构包括以下几个部分: 数组:用方括号([])表示,里面包含一组项,各项之间用逗号隔开。 对象:用花括号({})表示,里面包含一组键值对,各键值对之间用逗号隔开,…

    JavaScript 2023年6月11日
    00
  • JavaScript中用toString()方法返回时间为字符串

    在JavaScript中,我们可以通过使用toString()方法将时间对象转换为字符串。toString()方法是Date对象原型上定义的方法,其返回一个代表时间的字符串,以本地时间为准。 以下是使用toString()方法返回时间字符串的步骤: 创建一个日期对象 let myDate = new Date(); 调用toString()方法将日期对象转化…

    JavaScript 2023年5月27日
    00
  • 浅析javascript的return语句

    浅析JavaScript的return语句,我们可以从以下几个方面进行阐述: 1. return的作用 在函数内,return关键字的作用是“终止函数执行并返回一个值”。也就是说,当函数执行到return语句时,会立即退出函数并返回一个值,如果没有指定返回值,则返回undefined。 2. return的使用方式 在JavaScript中,return的使…

    JavaScript 2023年6月10日
    00
  • JavaScript中的字符串操作详解

    JavaScript中的字符串操作详解 JavaScript中的字符串操作是一个基础且重要的方面。在这个攻略中,我们将详细介绍字符串的常用操作及其在JavaScript应用中的具体用法。 字符串的声明方法 在JavaScript中,我们可以使用单引号或双引号来声明一个字符串。 示例代码1 let str1 = ‘这是一个双引号包裹的字符串’; let str…

    JavaScript 2023年6月1日
    00
  • JavaScript中的console.log()函数详细介绍

    JavaScript中的console.log()函数详细介绍 console.log() 函数的定义 JavaScript中的console.log()函数是用于向控制台输出信息的方法。当JavaScript程序执行到console.log()时,会将相应信息打印到浏览器的开发者控制台中。 console.log() 函数的使用方法 console.log…

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