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日

相关文章

  • 浅谈原生JS实现jQuery的animate()动画示例

    下面是“浅谈原生JS实现jQuery的animate()动画示例”的完整攻略。 1.了解animate()方法 在使用原生JS实现jQuery的animate()动画之前,首先需要了解animate()方法。animate()方法是jQuery中的方法,用于实现元素的动画效果,常用的参数有属性值、时间和回调函数等。该方法可以实现元素的位置、大小、透明度等动画…

    JavaScript 2023年6月10日
    00
  • JS数组splice操作实例分析

    JS数组splice操作实例分析 什么是splice操作? splice() 方法用于添加或删除数组的元素。 splice() 方法有三个参数:起始位置、要删除的元素个数和要添加的元素。 arrayObject.splice(index,howmany,item1,…..,itemX) index:必需,整数,规定添加/删除项目的位置,使用负数可从数组结…

    JavaScript 2023年5月27日
    00
  • JS正则表达式封装与使用操作示例

    JS正则表达式封装与使用操作示例 什么是正则表达式? 正则表达式是一种可以用来匹配文本中模式的工具。例如,你可以使用它来查找文本中所有符合特定模式的单词或者数字等。 正则表达式语法 正则表达式的语法非常复杂,这里只介绍其中一些常用的语法: | 表示或 [] 表示匹配其中一个字符,例如 [abc] 可以匹配 a、b 或 c [^] 表示匹配不属于其中的字符,例…

    JavaScript 2023年6月10日
    00
  • vue如何实现动态改变地址栏的参数值

    Vue.js是一款前端框架,使用Vue.js可以轻松构建单页面应用程序(SPA) 。在客户端路由中,我们有时需要修改URL中的参数,以满足特定的动态条件。 Vue.js 使用 vue-router 库来实现前端路由管理,所以我们需要在 router.js 中进行配置。下面是实现Vue.js动态改变地址栏参数值的方法: 1.使用 $router.push() …

    JavaScript 2023年6月11日
    00
  • JavaScript中使用指数方法Math.exp()的简介

    JavaScript中的 Math.exp() 方法是一个指数函数,用于计算以自然常数e为底的指数幂,其中e为一个数学常数(约等于2.71828)。该方法返回e的指定幂次方的值。 语法 Math.exp(x) 参数 x: 必需,一个数值,表示以e为底数的指数幂。 返回值 一个数值,表示e的x次幂。 例子 console.log(Math.exp(1)); /…

    JavaScript 2023年5月27日
    00
  • 用js读、写、删除Cookie代码分享及详细注释说明

    下面为大家分享JS读、写、删除Cookie的攻略,首先我们来简单了解一下Cookie。 Cookie简介 Cookie是一种存储在用户计算机上的小文件,它可以存储网站发送到用户计算机上的信息,以便于在用户下一次访问同一网站时使用,它属于浏览器缓存的一种。当然,Cookie的存储大小是有限制的,一般不超过4KB。 读Cookie 读取Cookie很简单,我们可…

    JavaScript 2023年6月11日
    00
  • 常用的js方法合集

    常用的JS方法合集 本篇攻略主要讲解常用的JS方法合集,包括字符串、数组、日期、正则表达式等方面的常用方法。 字符串方法 字符串是JS中最为常见的数据类型之一,在日常开发中经常需要对字符串进行操作。下面列出一些常用的字符串方法: string.length 用于获取字符串的长度,即包含的字符数。 javascript var str = “Hello Wor…

    JavaScript 2023年5月18日
    00
  • JS基于FileSystemObject创建一个指定路径的TXT文本文件

    下面给您详细讲解基于FileSystemObject创建指定路径的TXT文本文件的完整攻略。 步骤一:创建FileSystemObject对象 使用JavaScript创建FileSystemObject对象,可以使用以下代码: var fso = new ActiveXObject("Scripting.FileSystemObject&quot…

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