1.document也是dom节点。直接appendChild,但直接给document加节点没啥意义,1般都是document.body.appendChild或document.getElementsByTagName("head")[0].appendChild
2.这是函数闭包的问题,同1个函数中的变量都是同1个作用域的,onclick引用的是同1个作用域下的同1个变量。
3.用bind方法,bind算是1个8成标准的函数了,很多框架都提供了bind。1般的实现:
function bind(o, f, p){
  return function (){
    return f.apply(o, p);
  }
}
ele.onclick = bind(this_obj, function (){..}, [param1, param2, ...]);

解决方案 »

  1.   

    1. document.appendChild(obj)
    2. btn.onclick=function(){alert(i);};无法把参数传进去
    3. 使用call,apply函数。或者使用prototype.j中的bindAsEventListener方法
      

  2.   

    btn.onclick=(function(n){return function(){alert(n)}})(i);改成这样
      

  3.   

    function(){alert(i);};
    由于这个是引用值
    就是alert出i的值(而不是想当然的1 2 3 4)
    所以for完之后i的值是多少alert出来的值就是多少
      

  4.   

    (function(n){btn.onclick=function(){alert(n)}})(i);这也行
      

  5.   

    btn.onclick=(function(n){return function(){alert(n)}})(i);
    小弟看不懂啊,这是哪种写法?n和i,看起来没关系啊
      

  6.   


    btn.onclick=aa(i);function aa(n){return function(){alert(n)}}这样应该比较好理解
      

  7.   

    function foo(){
        
        for(var i=0; i<5;i++){
            var con = document.getElementById('con');
            var btn=document.createElement('button');
            btn.setAttribute("index", i);
            btn.onclick=function(e){alert(e.srcElement.getAttribute("index"));};
            btn.appendChild(document.createTextNode(i));        
            con.appendChild(btn);
        }
    }