考虑下面的代码:
希望每个动态函数都能获得自己的"i"的副本,其值为即时值。但是在这个更改后,当我单击任何一个链接时,会出现"1"。
我做错了什么?这对我来说是一个巨大的障碍。
考虑下面的代码:
<a href="javascript:void(-1)" id="a1">a1</a>
<a href="javascript:void(-1)" id="a2">a2</a>
<script type="text/javascript">
var buttons = []
buttons.push("a1")
buttons.push("a2")
var actions = []
for (var i in buttons)
{
actions[buttons[i]] = function() { alert(i) }
}
var elements = document.getElementsByTagName("a")
for (var k = 0; k < elements.length; k++)
{
elements[k].onclick = actions[elements[k].id]
}
</script>
基本上,它显示了两个锚点a1和a2,我希望在单击相应的锚点时弹出“1”和“2”的警报。
但是并没有发生这种情况,无论单击哪个都会得到“2”。在花费一个小时沉思代码后,我认为这可能是因为动态onclick
方法对于两个锚点都保留了“i”的最后一个值。
所以我将那个循环改成了:
for (var i in buttons)
{
var local_i = i.toString()
actions[buttons[i]] = function() { alert(local_i) }
}
希望每个动态函数都能获得自己的"i"的副本,其值为即时值。但是在这个更改后,当我单击任何一个链接时,会出现"1"。
我做错了什么?这对我来说是一个巨大的障碍。