程序运行过程:
i = 1; //将变量i初始化为1
obj.onclick=function(){alert(i)} ; //给obj添加事件,如果在此时触发事件,则弹出的是1
i=2; //i为2
然后引发事件,引发事件的时候,(上面的程序已经执行完了)i已经是2了,所以弹出的是2

解决方案 »

  1.   

    楼上的没明白楼主的意思,楼主不是要解释原因,而是想问下有没办法把变量传给添加事件时用。例如用attachEvent来追加事件也一样,我也想知道有没办法可以直接把变量传进去。
      

  2.   

    可以如://使用闭包,一点小技巧
    obj.onclick = createHandler(2);function createHandler(i)
    {
       return function()
       {
          alert(i);
       }
    }
      

  3.   

    楼上的定法我还第一次见。return function(),学习了。可是那和楼主的意思有什么关系呢?楼主是想添加onclick事件时把某个变量的值传进去。好像不是那意思哦。
      

  4.   


    var i=1;
    var j=i;
    obj.onclick=function(){alert(j)};
    i=2;
      

  5.   

    i=1 
    document.getElementById('d').onclick = (function(a){
    return function (){
    alert(a)
    }
    })(i);
    i=2 
      

  6.   

    =1   
    document.getElementById('d').onclick   =   (function(a){ 
    return   function   (){ 
    alert(a) 

    })(i); 
    i=2