<html><body>
<input type="button" id="R1">
<input type="button" id="R2">
<script language="javascript" type="text/javascript">
function a()
{
for (i=1 ;i<3 ;i++ )
{
    document.getElementById("R"+i.toString()).onclick=function(){onclick_event(i);}
}}
function onclick_event(num)
{
alert(num);
}
a();</script>
</body></html>
按正常的说这里动态捆绑了两个button 的事件为alert()
第一个按钮按下的应该是1
第二个应该是2
但结果相反全都是输出3也就是i的最大值
这里为什么把i当作静态变量传给onclick_event了?这里的i应该不会是3吧
最大值是2
为什么总是输出3??

解决方案 »

  1.   

    document.getElementById("R"+i.toString()).onclick=function(){onclick_event(i);}
    定义按钮的onclick事件,执行函数function(){onclick_event(i);},但是此时并没有执行,等到页面加载完毕,点击按钮触发此事件时,i已经变成了3,所以才会出现lz遇到的问题这样改
    document.getElementById("R"+i.toString()).onclick=tt(i);
    执行tt函数,参数为i
    funcion tt(i){
    return function (){onclick_event(i);};
    }
    这样i为1的时候,返回函数为function (){onclick_event(1);};
    i为2的时候,返回函数为function (){onclick_event(2);};
      

  2.   

    我不熟悉这个function 对象
    究竟是怎么样子的??onclick=function(){onclick_event(i);} 这样的正确意思是怎么样??
      

  3.   

    lihui_shine(浪尖赏花)的解释还是不对
    document.getElementById("R"+i.toString()).onclick=function(){onclick_event(i);}

    document.getElementById("R"+i.toString()).onclick=tt(i);
    执行tt函数,参数为i
    funcion tt(i){
    return function (){onclick_event(i);};
    }
    当鼠标点击时,onclick的值function(){onclick_event(i);}都是一样的
    i并没有被替换掉function可以看作一个代理类,具有代理的功能,和delegate意思上差不多
    要解释上述出现的问题,应该考虑javascript内存的操作了function a()
    {
        for (var i=1 ;i<3 ;i++ )
        {
            document.getElementById("R"+i.toString()).onclick=tt(i);
            //document.getElementById("R"+i.toString()).onclick=function(){onclick_event(i);}
            //alert(document.getElementById("R"+i.toString()).onclick);
        }
    }function onclick_event(num)
    {
        alert(num);
        alert(document.getElementById("R"+num.toString()).onclick);
    }function tt(i)
    {
        return function()
        {
            onclick_event(i);
        };
    }
    a();
      

  4.   

    不怎么知道怎么去查
    其实function 我也觉得是一个deletgate
    delegate我不怎么熟悉只了解到对象的事件关联是靠这东西来实现的
    大概也了解到delegate 是一个函数指针
    但就不了解function