首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Onclick函数只适用于for each循环的第一次迭代

Onclick函数只适用于for each循环的第一次迭代是因为在每次迭代中,for each循环会为每个元素创建一个新的作用域。在每个作用域中,都会创建一个新的onclick函数实例,而不是共享同一个函数实例。

这意味着在每次迭代中,都会创建一个新的onclick函数,并且只有第一次迭代中的onclick函数会被绑定到相应的元素上。随后的迭代中,新创建的onclick函数将会覆盖之前的onclick函数,导致只有第一次迭代中的onclick函数能够正常工作。

为了解决这个问题,可以使用闭包来保留每次迭代中的onclick函数实例。通过在for each循环中创建一个立即执行的函数表达式,并将当前元素作为参数传递给该函数,可以在每次迭代中创建一个新的作用域,并将当前元素的引用保存在闭包中。这样,每个onclick函数实例都会有自己独立的作用域和元素引用,就可以正确地绑定到相应的元素上。

以下是一个示例代码:

代码语言:txt
复制
var elements = document.getElementsByClassName('example');

Array.prototype.forEach.call(elements, function(element) {
  (function(el) {
    el.onclick = function() {
      // 在这里编写onclick函数的逻辑
    };
  })(element);
});

在这个示例中,我们使用立即执行的函数表达式创建了一个闭包,并将当前元素作为参数传递给该函数。在闭包中,我们将当前元素的引用保存在变量el中,并将onclick函数绑定到el上。这样,每个元素都有自己独立的onclick函数实例,可以正确地处理点击事件。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云函数(SCF):https://cloud.tencent.com/product/scf
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(TBC):https://cloud.tencent.com/product/tbc
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

for-each迭代器中调用Listremove方法会抛出ConcurrentModificationException原因

for-each循环遍历实质是迭代器,使用迭代remove方法前必须调用一下next()方法,并且调用一次next()方法后是不允许多次调用remove方法为什么呢?...(这个迭代器修改次数)和modCount(这个集合实际修改次数)不相等,就会抛出ConcurrentModificationException 迭代器里面没有add方法,用迭代器时,可以删除原来集合元素...Iterator it = list.iterator(); while (it.hasNext()) { it.remove(); } } 这个第一次循环就会抛出...所以刚刚代码是错为什么要it.next()?难道next()方法又改了lastRet吗?它确确实实更改了。  ...综上 1.在for-each循环迭代器中只可以做删除remove操作,不能做添加add操作。

25820

Spring Boot2(五):使用Spring Boot结合Thymeleaf模板引擎使用总结

'none' : 'inline-block')} + ''" th:onclick 点击事件 th:onclick="'getCollect()'" th:each 属性赋值 tr th:each="...(then) : (else)这种语法来判断显示内容 3、for 循环 <th scope="row...index(从0开始计算) count: 当前<em>迭代</em>对象<em>的</em> index(从1开始计算) size:被<em>迭代</em>对象<em>的</em>大小 current:当前<em>迭代</em>变量 even/odd:布尔值,当前<em>循环</em>是否是偶数/奇数(从0...开始计算) first:布尔值,当前<em>循环</em>是否是第一个 last:布尔值,当前<em>循环</em>是否是最后一个 4、URL URL 在 Web 应用模板中占据着十分重要<em>的</em>地位,需要特别注意<em>的</em>是 Thymeleaf 对于...-- th<em>循环</em>遍历传来<em>的</em>参数 -->

2.6K10
  • 8.1 C++ STL 变易拷贝算法

    (var1.begin(), var1.end(), MyPrint); // 通过迭代方式实现数值互换 iter_swap(&var1, &var2); for_each(var2.begin...调用fill函数后,会将[first, last]区间内所有元素全部填充为val。 需要注意是,fill函数只能填充对象,不能复制对象。...还需要注意是,fill函数只能等量复制相同值,无法按照某种规律变化,如果需要按照某种规律填充序列,可以使用generate函数。..., ForwardIterator last); 其中,first、middle、last是迭代器,表示要进行循环移动序列范围。...调用rotate函数后,将会将序列[first, last]中元素向左循环移动,使得中间区间[middle, last)元素移动到前面,前面的区间[first, middle)元素移动到后面,即做如下变换

    21950

    jQuery基础--基本概念

    为什么要学习jQuery? 【01-让div显示与设置内容.html】 使用javascript开发过程中,有许多缺点: 1. 查找元素方法太少,麻烦。 2....遍历伪数组很麻烦,通常要嵌套一大堆for循环。 3. 有兼容性问题。 4. 想要实现简单动画效果,也很麻烦 5. 代码冗余。 <!...{ //隐式迭代:偷偷遍历,jQuery会自动遍历,不需要我们遍历。...查找元素方法多种多样,非常灵活 2. 拥有隐式迭代特性,因此不再需要手写for循环了。 3. 完全没有兼容性问题。 4. 实现动画非常简单,而且功能更加强大。 5. 代码简单、粗暴。...JavaScript入口函数要等到页面中所有资源(包括图片、文件)加载完成才开始执行。 2. jQuery入口函数只会等待文档树加载完成就开始执行,并不会等待图片、文件加载。

    83120

    React Hooks 分享

    为什么函数式组件比类式组件好呢,为什么是在推出hooks之后呢?...1,只能在顶层调用Hooks,不要在循环,条件或嵌套函数中调用Hook                 2,不要在普通JavaScript中使用Hooks                 3,除了...) useState() 说明: 参数:第一次初始化指定值在内部作缓存 返回值: 包括两个元素数组,第一个为内部当前状态值,第二个为更新状态值函数 setXxx()两种写法: setXxx...[ ] ,回调函数只会在第一次render()后执行 可以把 useEffect 看做如下三个函数组合 componentDidMount() componentDidUpdate() componentWillmount...为什么不要在循环、条件判断或者子函数中调用? A:memoizedState 数组是按hook定义顺序来放置数据,如果 hook 顺序变化,memoizedState 并不会感知到。

    2.3K30

    8.1 C++ STL 变易拷贝算法

    (var1.begin(), var1.end(), MyPrint); // 通过迭代方式实现数值互换 iter_swap(&var1, &var2); for_each(var2.begin...调用fill函数后,会将[first, last]区间内所有元素全部填充为val。需要注意是,fill函数只能填充对象,不能复制对象。...还需要注意是,fill函数只能等量复制相同值,无法按照某种规律变化,如果需要按照某种规律填充序列,可以使用generate函数。..., ForwardIterator last);其中,first、middle、last是迭代器,表示要进行循环移动序列范围。...调用rotate函数后,将会将序列[first, last]中元素向左循环移动,使得中间区间[middle, last)元素移动到前面,前面的区间[first, middle)元素移动到后面,即做如下变换

    26160

    【性能工具】LoadRunner参数化取值详解

    1、Sequential+Each iteration(顺序方式+每次迭代更新取值),设置Run—Logic中action循环迭代5次,并运行以上脚本,结果如下: Action.c(5): Notify...如果设置循环次数超过数据行数,此时再回放之后结果就是,超过第八,从第九次开始就又从temp1开始读取,完成循环迭代读取过程。...2、Sequential+Each occurrence(顺序方式+每次取值更新),设置Run—Logic中action循环迭代5次,并运行以上脚本,结果如下: Action.c(5): Notify...关于Once读取方式是我们通常容易犯错地方,就以为选择Once可能就是每个参数只读取一次,导致最后可能就只插入一条数据进去进入到库中。   ...迭代循环取值,而Each occurrence是基于每一次取新值,当然在通常情况下,这两者其实是有共性,如果一个脚本中只有一个参数,且只读取一次参数的话,设置这两种方式结果是相同,可以将脚本缩减如下

    56150

    Java,你告诉我 fail-fast 是什么鬼?

    02、for each 中集合 remove 操作 很长一段时间里,我都不明白为什么不能在 for each 循环里进行元素 remove。今天我们就来借机来体验一把。...是通过迭代器 Iterator 配合 while 循环实现。...在 for each 循环中,集合遍历其实是通过迭代器 Iterator 配合 while 循环实现,但是元素 remove 却直接使用集合类自身方法。...04、怎么避开 fail-fast 保护机制呢 通过上面的分析,相信大家都明白为什么不能在 for each 循环里进行元素 remove 了。 那怎么避开 fail-fast 保护机制呢?...这样迭代器被称为 fail-fast 迭代器,因为尽早失败比未来出现不确定风险更好。 既然是针对多线程,为什么我们之前分析都是基于单线程呢?

    52210

    Java,你告诉我 fail-fast 是什么鬼?

    02、for each 中集合 remove 操作 很长一段时间里,我都不明白为什么不能在 for each 循环里进行元素 remove。今天我们就来借机来体验一把。...是通过迭代器 Iterator 配合 while 循环实现。...在 for each 循环中,集合遍历其实是通过迭代器 Iterator 配合 while 循环实现,但是元素 remove 却直接使用集合类自身方法。...04、怎么避开 fail-fast 保护机制呢 通过上面的分析,相信大家都明白为什么不能在 for each 循环里进行元素 remove 了。 那怎么避开 fail-fast 保护机制呢?...这样迭代器被称为 fail-fast 迭代器,因为尽早失败比未来出现不确定风险更好。 既然是针对多线程,为什么我们之前分析都是基于单线程呢?

    47620

    【性能工具】LoadRunner参数化详解

    一次对于每一个Vuser,第一次迭代中分配值将用于所有的后续迭代第一次迭代中分配随机值将用于该Vuser所有迭代第一次迭代中分配唯一值将用于该Vuser所有后续迭代   如果LoadRunner...所有用户第一次循环取第一行值,第二次循环取第二行值 each occurrence在某次循环中或者脚本中使用参数地方,所有用户取值相同。...所有的用户所有的循环中,只用一个值(即参数中第一行值)randomeach iteration不同用户,在不同循环次数中,随机取值 each occurrence不同用户,脚本中出现要使用参数的话...,随机取值一次,循环一次再随机取值一次 once不同用户,不管循环多少次,只随机取值一次。...each occurrence只能手工分配用户,给每个用户分配好X个参数后,在脚本中有参数地方,就使用已经分配好X个参数。 once按照用户数分配给每个用户分配一个参数而已。

    74960

    从零开始学C++之STL(五):非变动性算法源代码分析与使用示例( for_each、min_element 、find_if、search 等)

    ChkFirst)         _Func(*_ChkFirst);     return (_Func); } 函数以模板实现,_Inlt 即 iterator 类型,_Fn1 是函数指针,函数体内首先判断迭代器是否在范围内以及传递第三个参数是否是...,find 就是遍历容器,找出与Val 相等第一个元素位置,函数返回迭代器 。...,假设前两个迭代器指示位置有10个元素,后两个迭代器指示位置有2个元素,如果在第一个区间能够找到 完全匹配第二个区间元素,则返回起始位置,如果不能则返回Last1,即第一个区间末尾,注意必须顺序匹配...2个元素,也可以看 成在第一个区间寻找第一次出现第二个区间子段。...函数实现也不难理解,双重循环,比如首先比较L1[0] 与 L2[0] , 如果相等再比较L1[1] 与 L2[1]; 如果不等则移动,从L1[1] 开始比 较,假设L1[4], L1[5] 与L2[0

    83100

    数据结构和算法——冒泡排序

    1、要解决问题 给定如下所示数字列表,请按升序对它们进行排序。 $numbers = [21,25,100,98,89,77]; 要求 对数字进行排序时,需要使用冒泡排序算法。...并且迭代直到所有元素都到位才结束。每次迭代后,至少有一个元素移到列表末尾。下面是第一次迭代说明: ?...描述冒泡排序伪代码如下: FOR each element of the list FOR each element of the list IF current element...END FOR END FOR 内层循环被认为是一次迭代,外层循环确保我们迭代足够时间来对列表充分进行排序。...3、PHP实现冒泡排序 要在PHP中实现冒泡排序,我们只需要两层循环。请注意,两层循环终止是:列表长度-1。这是为了防止访问未索引元素。 <?

    45320

    深入理解JavaScript函数式编程

    为什么要学习函数式编程?...JavaScript中高阶函数 ❝高阶函数 ❞ 函数作为参数,如下代码实现循环遍历数组,通过传递参数回调函数可以拿到每个数组遍历值在回调函数中进行相应处理 //模拟forEach function...reverse 而数组reverse 会改变原有数组不是一个纯函数方法 const r = _.each(array,(item,index)=>{ console.log(item,index...当函数有多个参数时候,对函数进行改造调用一个函数只传递并返回一个新函数(这部分参数以后永远不会发生变化),这个新函数去接收剩余参数,返回结果。...fp模块 如下代码,在_.map中对某个数组执行将数组元素转换为Number类型,但是结果打印却是:23 NaN 2 这是为什么呢?

    4.3K30

    loadrunner 脚本优化-参数化之Parameter List参数取值

    Logic中迭代次数完成记录变化操作。...取值 甲|乙|丙|丁|戊 迭代次数6:NewParam取值 甲|乙|丙|丁|戊|甲 注意:Update on value on Each iteration时,只有开始了新一次迭代,也就是说回放日志中出现了...{ lr_eval_string("{NewParam}"); return 0; } 无管迭代多少次,或者for循环,NewParam取值都是甲 4 Random+Each iteration...5 Random+Each occurrence 每当取一次该参数值,从参数列表中重新取一次随机值 6 Random+Once 当第一次取到随机内容后,再不更新记录。 ? ?...Continue in a cyclic manner 当参数取值超出参数表记录时,使用循环扫描方式 3)Continue with last value 当参数取值超出参数表记录时,使用参数表中最后一个值

    80520

    Java中 for each循环实现原理

    参考链接: Java for-each循环 一、foreach()简介  1.for each语句是jdk1.5新特征之一,在遍历集合,数组方面提供了很大便利。 ...2.for each语句是for语句特殊简化版本,但是for each语句并不能完全取代for语句,然而,任何for each语句都可以改写为for语句版本。  ...3.for each语句格式:    for(元素数据类型  元素变量:遍历对象)    {     //循环体内容    }  二、实现原理  平时Java程序中,应用比较多就是对Collection...数组没有实现为什么也可以用呢?  那是因为遍历数组时,会转换为对数组中每一个元素循环引用,相当于for语法循环遍历一样。  那么为什么是数组或者实现了这个接口,就能实现遍历呢?...java中有一个叫做迭代器模式设计模式,这个其实就是对迭代器模式一个实现。对于数组,就是转化为对数组中每一个元素循环引用

    1.5K10
    领券