button.onclick=function(){alert(i)}
==>
var fn = function(){alert(fn.i)};
fn.i = i;
button.onclick=fn;

解决方案 »

  1.   

    是将那一行改为这三行:
    var fn = function(){alert(event.srcElement.i)};
    button.i = i;
    button.onclick=fn;
      

  2.   

    你的这一行:
    button.onclick=function(){alert(i)}
      

  3.   

    event.srcElement.i
    这个能解释一下是什么意思吗?
      

  4.   

    大概明白了,相当于button这个实例本身的一个变量button.i,想不到还能这样负值和引用。(是不是这个意思?不知道我理解对了没有)高手,高手。真是感谢!除了这种方法还能有其它方法来解决吗?
      

  5.   

    for(i=0;i<4;i++)
    {
       var button=document.createElement("button")
       button.onclick=(function(p){ return function(){ alert(p) }; })(i);
       button.value="按钮"+i
       document.body.appendChild(button)
    }
    不能只知其然,而不知其所以然
    这涉及一个javascript的解释机制问题:相关内容是:lexical scope  ,  closure
      

  6.   

    以下为另一方法:
    for(i=0;i<4;i++)
    {
       var button=document.createElement("button")
       var fn = addi(i);
       button.onclick=fn;
       button.value="按钮"+i
       document.body.appendChild(button)
    }
    function addi( i )
    {
    var fn = function(){alert(i);};
    return fn;
    }
      

  7.   

    I had answered this question before, there is another way:   button.onclick=new Function("alert(" + i + ")");
      

  8.   

    虽写法不同,其实与我后一方法本质一样。另:我个人不喜欢 new Function这种写法。
      

  9.   

    哇,大家都很厉害,学习中ing。我理解消化一下再结分,随便看看还有其它人有回复没有。真是太感谢大家了
      

  10.   

    for(i=0;i<4;i++)
    {
       var button=document.createElement("button")
       button.onclick=new function("alert("+i+")")
       button.value="按钮"+i
       document.body.appendChild(button)
    }
    fason(咖啡人生)你的这个NEW的方法我试了一下,运行出错。说“缺少标识符”
      

  11.   

    function==>Function
    你要注意大小写。那可不是fason写错了。
      

  12.   

    是O,有点不明白了。
    button.onclick=function(){alert(i)}和button.onclick=new Function("alert("+i+")")里的这两个function有什么不同?