- JScript code
<input name="q" type="text" value="1"> <input name="q" type="text" value="2"> <input name="q" type="text" value="3"> <script type="text/javascript"> var name = document.getElementsByName("q"); for(var i=0;i<name.length;i++){ var na = name[i]; na.onclick=function(){ alert(na.value); } }
这段代码是循环给每个标签添加onclick事件
问题1:
但是如果将上面的代码换成下面的代码,onclick就无效了(i在同一次循环里没变化吧?怎么会就没用了呢?)
问题2:下面代码的注释
- JScript code
<input name="q" type="text" value="1"> <input name="q" type="text" value="2"> <input name="q" type="text" value="3"> <script type="text/javascript"> var name = document.getElementsByName("q"); for(var i=0;i<name.length;i++){ name[i].onclick=function(){ alert(name[i].value); //为什么要将name[i].value换成this.value才能使得点击事件,显示的是当前点击组件的value?而不是最后那个文本框的value? } }
------解决方案--------------------------------------------------------
因为i的是一个临时变量,你name[i].onclick=function(){}实际上是定义了一个方法,这个方法是独立的,里面引用不到外面循环的变量