alert-1,而不是循环中各自的计数器
alert -1 instead of their respective counter inside of the loop?
为什么单击锚点时会提醒-1
,而不是循环中它们各自的计数器?如何修复代码,使其能够提醒正确的号码?
<a href="#">text</a><br><a href="#">link</a>
<script>
var as = document.getElementsByTagName('a');
for ( var i = as.length; i--; ) {
as[i].onclick = function() {
alert(i);
return false;
}
}
</script>
这是一个闭包问题:您在循环中定义的每个匿名函数都会读取for循环末尾的"i"值。
您需要另一个作用域,例如调用一个设置onclick处理程序的函数。
function add_onclick(el, i) {
el.onclick = function() {
alert(i);
return false;
}
}
var as = document.getElementsByTagName('a');
for ( var i = as.length; i--; ) {
add_onclick(as[i],i);
}
实现与Keeper答案相同结果的另一种方法是为闭包使用函数表达式,您可以立即调用该表达式,使用您的值作为参数来创建闭包
var as = document.getElementsByTagName('a');
for ( var i = as.length; i--; ) (function (i) {
as[i].onclick = function() {
alert(i);
return false;
}
}(i));
这种方式需要最少的代码重构
您正在打印变量i
的值。循环后,其值为-1
。
相关文章:
- 如何在for循环中使用计数器
- 函数式编程 - 用于递增计数器的简单 for 循环
- 循环的Javascript中的PHP计数器
- 访问带有 for 循环中的计数器的数组
- alert-1,而不是循环中各自的计数器
- 使用{{render}}进行渲染时的循环计数器
- for 循环中 setInterval 中计数器变量 i 的作用域
- Javascript猜号游戏 - 设置计数器和while循环
- 将增量计数器连接到 JSON 响应循环中的数组选择器的末尾
- Javascript计数器控制循环使用(while)错误
- 在对象中查找值时,对于循环计数器
- 分配给新变量时,计数器值在循环中更改
- 计数器神秘地循环递增
- 如何创建一个计数器循环,该循环在单击提交按钮时启动,并输出多行单词,每个单词前面都有一个数字
- 启动和停止循环计数器 JavaScript
- 为什么嵌套的 Java 脚本循环具有相同的循环计数器名称
- 根据循环中的计数器创建具有唯一名称的 JavaScript 对象
- ajax调用的循环-访问循环计数器
- 函数调用中的循环计数器可视性
- 试图在do while循环中放入一个尝试计数器(Basic JavaScript)