我知道这段代码不起作用,我也知道原因.但是,我不知道如何解决它:
JavaScript的:
var $ = function(id) { return document.getElementById(id); };
document.addEventListener('DOMContentLoaded', function()
{
for(var i = 1; i <= 3; i++)
{
$('a' + i).addEventListener('click', function()
{
console.log(i);
});
}
});
Run Code Online (Sandbox Code Playgroud)
HTML:
<a href="#" id="a1">1</a>
<a href="#" id="a2">2</a>
<a href="#" id="a3">3</a>
Run Code Online (Sandbox Code Playgroud)
我希望它打印您点击的链接号,而不仅仅是"4".我宁愿避免使用节点的属性(id或内容),而是修复循环.
将循环块包装在自己的匿名函数中:
document.addEventListener('DOMContentLoaded', function()
{
for(var i = 1; i <= 3; i++)
{
(function(i) {
$('a' + i).addEventListener('click', function() {
console.log(i);
})
})(i);
}
}
Run Code Online (Sandbox Code Playgroud)
这会i在每次调用/迭代时为内部函数创建一个本地的新实例.如果没有此本地副本,传递给addEventListener(在每次迭代时)的每个函数都会关闭对同一变量的引用,该变量的值等于4任何这些回调执行的时间.
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |