原帖在这里 我怎么都回复不了 郁闷
http://topic.csdn.net/u/20080921/09/8047befa-3afe-44da-8d9a-96500343e47a.html

解决方案 »

  1.   

    btns[i].onclick=function(){btncall(this)};这样试试
      

  2.   


     if(btns[i].innerText=="我要修改!")//根据按钮里的文本判断是什么类型按钮.
     {
        btns[i].onclick==btncall(btn[i]); 
    //精简的话,就是这里的值怎么传?我传btn[i]进去应该是没有错的? 可是我调试的时候他总是报btn未定义..就是btncall内部的变量名未定义..可能是我参数没传进去..
     }
      

  3.   

    我也看不到你的btn在哪定义了
      

  4.   


    //btncall 就是call下面这个函数啊.
    function btncall(btn)//修改按钮的函数过程
    {
        var tr=btn.parentElement.parentElement;//取到按钮所对应的行.
        btn.innerText="我改好了!!";//把按钮名称变为这个
        btn.onclick=function()//修改当前按钮的函数过程,这个过程是"我改好了"的函数过程.
        {
            /*remote call*/
            this.innerText="我要修改!";
            //print(obj);
            for(var j=0;j<tr.cells.length;j++)//这里的作用是,遍历一行中的文本框,把文本框封装到对应的js对象中
            {    
                var shuru=tr.cells(j).all(0);
                if(shuru.tagName=="INPUT" && shuru.inminks!= undefined)
                {
                    for(var ziduan in obj)
                    {
                        if(obj.hasOwnProperty(ziduan))
                        {
                            if(ziduan==objid)obj[ziduan]=tr.id;
                            if(ziduan==shuru.inminks)
                            {
                                obj[ziduan]=shuru.value;
                                tr.cells(j).innerText=shuru.value;
                                tr.cells(j).removeChild(shuru);
                                //此处还得加上一个函数过程,就是当前的btncall.修改回按钮的onclick事件响应.
                            }
                        }
                    }
                }
            }
            
        };
        for(var k=0;k<txtnum;k++)//此处代码是根据js对象的字段名数组,依次创建文本框
        {
            if(fields[k]==tr.cells[k].minks)
            {
                var editor=document.createElement("input");
                editor.type="text";
                editor.value=tr.cells[k].innerText;
                editor.setAttribute("inminks",tr.cells[k].minks);
                tr.cells[k].innerText="";
                tr.cells[k].appendChild(editor);
            }
        }
        /*then call update method*/
    }//楼上的是什么意思呢? 我这样子传值不对吗?????
      

  5.   

    btns[i].onclick==btncall(btn[i]);
    判断条件的时候才是用"=="的,赋值一般都用单"="的。
    而且,我觉得你这么写,赋过去的是结果,而不是对象。
      

  6.   

    倒, 这个问题我已经改过来了. 就是用赋值符号赋过去他报btn未定义
      

  7.   

    嗯,btn没定义呀。
    先定义一下吧。
      

  8.   

    btns[i].onclick=btncall(btn[i]); 
    是這個裏面的btn未定義?
    btns[i]和btn[i]有區別伐?還是說他們本身就是同一個?
      

  9.   

    =====================
    是btns[i] 不好意思我 太粗心了! 可是还是报错!"缺少对象"! 
    我晕啊, ie7有没有什么好的调试器 这报错报的太让人跳楼了..
      

  10.   

    (function(i){btns[i].onclick=function(){btncall(this)}})(i) (function(i){btns[i].onclick=function(){btncall(btns[i])}})(i) 
      

  11.   

    我晕 我搞定了
    我这写法烂的吓死人..
    郁闷 就一个递归就搞定了.
    希望下次可以学习到好的写法. function setBtnEvent(tdid,txtnum,obj,objid)
    {
    var tab=$(tdid);
    var btns=new Array();
    var fields=new Array();
    var fieldCount=0;
    for(var field in obj)
    {
    if(obj.hasOwnProperty(field))
    {
    if(field==objid)continue;
    fields[fieldCount]=field;
    fieldCount++;
    }
    }

    btns=tab.getElementsByTagName("button");
    for(var i=0;i<btns.length;i++)
    {
    if(btns[i].innerText=="我要修改!")
    {
    btns[i].onclick=function()
    {
    var tr=this.parentElement.parentElement;
    this.innerText="我改好了!!";
    this.onclick=function()
    {
    /*remote call*/
    this.innerText="我要修改!";
    setBtnEvent(tdid,txtnum,obj,objid);
    for(var j=0;j<tr.cells.length;j++)
    {
    var shuru=tr.cells(j).all(0);
    if(shuru.tagName=="INPUT" && shuru.inminks!= undefined)
    {
    for(var ziduan in obj)
    {
    if(obj.hasOwnProperty(ziduan))
    {
    if(ziduan==objid)obj[ziduan]=tr.id;
    if(ziduan==shuru.inminks)
    {
    obj[ziduan]=shuru.value;
    tr.cells(j).removeChild(shuru);
    tr.cells(j).innerText=shuru.value;
    }
    }
    }
    }
    }

    };
    for(var k=0;k<txtnum;k++)
    {
    if(fields[k]==tr.cells[k].minks)
    {
    var editor=document.createElement("input");
    editor.type="text";
    editor.value=tr.cells[k].innerText;
    editor.setAttribute("inminks",tr.cells[k].minks);
    tr.cells[k].innerText="";
    tr.cells[k].appendChild(editor);
    }
    }
    /*then call update method*/
    }
    }
    else if(btns[i].innerText=="我改好了!!")
    {
    var tr=btns[i].parentElement.parentElement;
    this.onclick=function()
    {
    /*remote call*/
    this.innerText="我要修改!";
    setBtnEvent(tdid,txtnum,obj,objid);
    for(var j=0;j<tr.cells.length;j++)
    {
    var shuru=tr.cells(j).all(0);
    if(shuru.tagName=="INPUT" && shuru.inminks!= undefined)
    {
    for(var ziduan in obj)
    {
    if(obj.hasOwnProperty(ziduan))
    {
    if(ziduan==objid)obj[ziduan]=tr.id;
    if(ziduan==shuru.inminks)
    {
    obj[ziduan]=shuru.value;
    tr.cells(j).removeChild(shuru);
    tr.cells(j).innerText=shuru.value;
    }
    }
    }
    }
    }
    };
    }
    else
    {
    btns[i].onclick=function()
    {
    if(!confirm("真的要删掉他吗?"))return;
    /*then call del method*/
    }
    }
    }
    }