for(var i=0;i<n;i++)
for循环给元素添加事件时貌似只会取变量的最后一步循环中的值。有什么方法可以把中间的值也用上吗??
能举个简单的例子吗?谢谢~~!!

解决方案 »

  1.   

    闭包喜欢讲它,说到底还是因为i变量“存活下来了”for(var i=0;i<n;i++){
      //...do stuff
    }alert(i) // n-1 跳出来, i根本都还在。处理方法是把i作为参数传进去,并立即执行var inputs = document.getElementsByTagName('input');
    for (var i = 0; i < inputs.length; i++) {
        inputs[i].onclick = (function (k) {
            return (function () {
                alert(k);
            });
        })(i);
    }如果循环体内写成
    inputs[i].onclick = function () {
        alert(i);
    };
    那么跳出来都是3
      

  2.   

    上面忘掉补DOM了,3个 <input type="button" value="click" />
      

  3.   

    <script type="text/javascript">
    function mm(){
    alert("第"+this.kk+"按钮");

    function init(){
    var a=document.getElementsByTagName("input");
    for(var i=0;i<a.length;i++){
    a[i].kk=i+1;
    a[i].onclick=mm;
    }
    }
    </script>
    </head>
    <body onload="init()">
    <input type="button" value="1">
    <input type="button" value="2">
    <input type="button" value="3">
    </body>
    给每个对象加个只用来标记的属性试试吧  呵呵 楼上的方法太高端了  完全不懂  呵呵
      

  4.   


    什么叫只会取最后一次循环的值,从来没有这种说法!!真你说的这样js语言早就完蛋了
    二楼说的情况倒是有,js里面for循环没有自己的作用域,你在for循环内部声明的变量循环结束后仍然可以访问
      

  5.   

    能帮我解释下这个结构吗?
    没看太懂:(function () {
      alert(k);
      });
      })(i);
    特别最后那个(i)
    谢谢!~
      

  6.   

    (function () {
        //anonymous function executed
    })();
    //=>
    var f = function () {
        //named function
    };
    f();//executed(function (x) {
        //anonymous function executed with a parameter 
    })(i);
    ==>
    var f = function (x) {
        //named function
    };
    f(i);//executed with parameter "i"