3个回答
展开全部
这是典型的作用域的问题。
i的作用域在 function的前面而不是在function里面。 而变量名只是一个指针,指向了值。 也就是唤拿说i只是指向了 1 2 3 4 5这些值,并不是说i就是1 2 3 4 5. i被循环了5次,所以5个点击事件的n 都等于5,而不是1 2 3 4 5. 改成下面这样,将i传递到function里面去, 因为function的参数是按值传递的,不是按 指针传递。 所以传进去的时候是什么值,取出来则裤就是什么值。孙链简
document.getElementsByTagName('input')[i].onclick = (function(n) {
n //
})(i);
追问
我听懂了呀,但是我看不太懂您的代码内容。上面的代码是不是等价于下面这段
document.getElementsByTagName('input')[i].onclick = (function(i) {
n //
});i
追答
不等于。 我给你提供的代码可以解决你的问题。 但是会引出新问题,那就是会自动执行那个匿名函数。所以你如果是要绑定事件的话不推荐这样写。你只是要取值N的话,有一大堆的写法, 可以先将N绑定到input的一些DOM上, 然后从DOM上面取值。
for(var i = 0; i < 5; i++){
var input = document.getElementsByTagName('input')[i];
input.index = i + i;
input.onclick = function() {
n = this.index;
};
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询