JS中for循环绑定事件

news/2024/9/3 0:30:04 标签: js, javascript

在网页中有五个按钮,需求为:点击按钮,将按钮的索引值输出。

初学JS时遇到的问题,今天学习bind方法时又想起来了,分享一下。

先看一下代码

javascript">  var btns = document.querySelectorAll('button')
    for (var i = 0; i < btns.length; i++) {
    	btns[i].onclick = function () {
    		  console.log(i)
    	 }
    }

此段代码,先是获取到所有的按钮,然后用for循环依次给每个按钮绑定点击事件。点击按钮之后,响应的i会被输出,也就是输出索引值。

真是的是这样吗??当然不是。不论点击那个按钮,输出的结果都为 5。

因为JS中点击事件为异步函数,JS会先执行那些非异步函数(同步函数)。那么,也就是说,for循环和先循环五次,给每个按钮绑定了点击事件。注意了,绑定点击事件的时候并不会执行点击事件,而是会等待点击事件触发时才执行。也就是说,当我们点击按钮,触发点击事件的时候,for循环已经进行了五次,i = 5,所以每个按钮输出的结果均为 5.

想修改正确,其实很简单。
在绑定点击事件的上一行,加上这句话即可,手动给按钮添加一个索引

javascript">        btns[i].index = i;

在输出时,加上这句话即可输出对应的索引。

javascript">        console.log(this.index)

http://www.niftyadmin.cn/n/1258011.html

相关文章

Fitnesse FIT的使用

FIT是fitnesse使用的默认的引擎(SLIM的使用在上一篇文章中说明)&#xff0c;不需要特别声明即可使用执行表格测试&#xff0c;所有编写的fixture都需要继承Fit的Fitxture 编写测试用例前需要先声明class或者jar包所在的路径&#xff0c;才能找到所需要的fixture 使用关键字path…

四则运算网页终结版

主要思路&#xff1a;设计三个Jsp,分别是控制出题的参数&#xff0c;出题及输入题目答案&#xff0c;处理输入的答案。创建一个类包&#xff0c;将涉及到的方法连接数据库&#xff0c;处理数据库中表的数据&#xff0c;计算有无括号的整数运算&#xff0c;计算求余运算的整数运…

Cocoapods 版本更新与更新到指定版本

1.本地现有的Cocoapods的版本号是1.1.0.rc.2&#xff0c;想升级到最新版本 1、先切换gem源 gem sources --remove https://rubygems.org/ gem source -a https://gems.ruby-china.org 查看是否切换成功 gem source -l 打印出*** CURRENT SOURCES *** https://gems.ruby-china.o…

js引入方式

常用的方式有两种&#xff1a; 1.外部引入 <script src"js/jquery-3.5.1.js"></script>2.script标签中直接书写 <script>var x 10;function f() {console.log(x)} </script>注意点&#xff1a; 在<script></script>中&…

JavaWeb【二、Tomcat安装】

简版&#xff1a; 下载安装 http://tomcat.apache.org/download-80.cgi 环境变量 CATALINA_HOME-tomcat安装路径-【E:\apache-tomcat-8.5.13】 Eclipse配置&#xff1a; 1、jre路径 windows->preferences->Java->Installed JREs->选择希望使用的JRE路径【F:\Progra…

<!DOCTYPE html>是什么?

<!DOCTYPE html>其实就是告诉浏览器本网页的 文档模式 为 标准模式。 如果不加上这句话&#xff0c;浏览器会默认开启混杂模式&#xff0c;这是我们不提倡的&#xff0c;因为不同浏览器在此模式下的行为差异巨大。

Decoration2:引入Angularjs显示前台一条数据

SpringMVC内置的RestFul API格式采用的是最复杂最全面的HATEOAS规范&#xff0c;对于简单应用来说&#xff0c;前台解析起来不方便&#xff0c;我们下面主要想办法重新定义一种简单的RestFulAPI。 &#xff08;1&#xff09;先是尝试了修改application/haljson为普通applicatio…

简单springboot及springboot cloud环境搭建

springboot使用特定的方式&#xff0c;简化了spring的各种xml配置文件&#xff0c;并通过maven或者gradle&#xff0c;完成所需依赖&#xff0c;使用springboot maven插件&#xff0c;可直接输出可运行的jar包&#xff0c;省去了tomcat等容器的部署&#xff0c;使得基于http的网…