javascript - 在循环中使用索引两次
问题描述
我试图找出为什么我不能在循环中使用两次索引的原因,
应该有一些非常简单的东西我错过了。
代码的结构是这样的:
<p id="one">test</p>
<p class="two">a</p>
<p class="two">b</p>
<p class="two">c</p>
<script>
var one = document.getElementById("one");
var two = document.getElementsByClassName("two");
var i = 0;
while (i < two.length) {
two[i].addEventListener("click", function() {two[i].innerHTML = one.innerHTML;});
i++;
}
</script>
任何建议将不胜感激 =)
解决方案
问题是当
function() {two[i].innerHTML = one.innerHTML;});
i
运行,循环将已经完成,所以two.length
. 您需要使用闭包:
while (i < two.length) {
(function(i) {
two[i].addEventListener("click", function() {two[i].innerHTML = one.innerHTML;});
)(i);
i++;
}
或使用不同类型的循环并使用let
:
for(let i = 0; i < two.length; i++){
two[i].addEventListener("click", function() {two[i].innerHTML = one.innerHTML;});
}
推荐阅读
- android - Mockito.verify 没有看到方法执行,即使它是
- javascript - Webpack - 安装 SimpeWebRtc 时未定义窗口
- django - Django rest框架在serializer.py或views.py中哪里写复杂的逻辑?
- flutter - 如何对包含括号的字符串使用拆分方法?
- html - 如何使标题占据所有垂直空间,将列表向右推?
- vhdl - 什么是 {globally|locally} 静态 {primary|expression|range|subexpression},它是什么意思?
- google-api - 地理编码 API 与容器和 IP 白名单的集成
- azure - botframework 网络聊天 V4 构建和生成自定义 CSS 和 JS 文件
- python - 不是 Flask SelectField 中的有效选择
- java - Apache POI:如何设置数据透视表显示布局?