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日

相关文章

  • 跟我学习javascript的闭包

    跟我学习JavaScript的闭包攻略 什么是闭包? 在JavaScript中,闭包是指一个函数可以访问并操作定义在其它函数内部的变量。 具体来说,当一个函数返回另一个函数时,返回的函数可以访问其父级函数的变量,这个返回的函数就是一个闭包。 为什么需要使用闭包? 使用闭包有以下几个好处: 私有化变量: 为变量提供私有化处理,保护不被外部所访问,实现数据的安全…

    JavaScript 2023年5月27日
    00
  • js实现的在本地预览图片功能示例

    “js实现的在本地预览图片功能”的攻略如下: 1. 了解FileReader API JavaScript中的FileReader API可以让我们在浏览器中读取文件,包括图片等二进制文件。该API中最常用的方法是readAsDataURL(),用于读取指定文件并将其转换为Data URL格式,以便在HTML <img>元素中进行显示。 以下是一…

    JavaScript 2023年6月11日
    00
  • vue之el-form表单校验以及常用正则详解

    Vue之el-form表单校验以及常用正则详解 前言 在前后端分离的web开发中,前端负责数据的采集、交互等操作。在web表单中,数据的准确性、合法性都需要得到保障,因此加入表单校验机制,不仅可以规范数据的格式,降低后端的数据处理难度,也能增强用户的体验感。 Vue是一套渐进式的JavaScript框架,本文主要介绍Vue中的表单校验以及常用正则的运用。 e…

    JavaScript 2023年6月10日
    00
  • JavaScript重定向URL参数的两种方法小结

    下面是JavaScript重定向URL参数的两种方法小结的详细攻略。 简介 在开发Web应用程序时,我们可能需要将用户重定向到另一个页面,并传递一些数据。这些数据可以作为URL参数传递。JavaScript可以轻松地重定向到另一个URL,并将参数添加到它上面。 本文将介绍两种JavaScript重定向URL参数的方法,分别是通过window.location…

    JavaScript 2023年6月11日
    00
  • JavaScript箭头函数中的this详解

    标题:JavaScript箭头函数中的this详解 在JavaScript中,this是一个非常重要的关键字,它表示当前上下文中的对象。然而,在箭头函数中,this却和常规的函数有所不同,它的指向更有一些特别之处。下面我们将对JavaScript箭头函数中的this进行详细讲解。 正常函数中的this 在正常函数中,this的指向是根据函数的调用方式来决定的…

    JavaScript 2023年6月10日
    00
  • Asp.Net 不同的OnClick事件区别小结(onserverclick,onclientclick)

    Asp.Net中常用的OnClick事件主要有两种,分别是onserverclick和onclientclick,并且它们在应用场景和使用方法上也有所差别。 1. onserverclick 事件 onserverclick 事件通常用于向服务器端发送请求,server端通过回调函数的形式完成事件绑定,一般在 aspx.cs 文件中实现。 <asp:B…

    JavaScript 2023年6月11日
    00
  • JavaScript实现二叉树的先序、中序及后序遍历方法详解

    JavaScript实现二叉树的先序、中序及后序遍历方法详解 一、二叉树的定义 二叉树是一个每个节点最多有两个子树的树结构,通常分为左子树、右子树。二叉树有多种遍历方式,包括先序遍历、中序遍历和后序遍历。 其中, 先序遍历:按照“根结点-左子树-右子树”的方式遍历二叉树; 中序遍历:按照“左子树-根结点-右子树”的方式遍历二叉树; 后序遍历:按照“左子树-右…

    JavaScript 2023年5月28日
    00
  • 创建与框架无关的JavaScript插件

    创建与框架无关的JavaScript插件,需要考虑以下关键要点: 1. 避免与全局命名空间冲突 在创建插件时,应尽可能避免使用全局命名空间中已存在的变量和函数。可以通过创建一个伪命名空间,将插件中的所有变量和函数保存在其中,并确保不会与其他脚本发生冲突。 var MyPlugin = (function() { // 插件的代码放在这里… })(); 2…

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