this.editUser = function (id) {
var user = this.getUserById(id);
var html = '<td><input type="checkbox" name="selectBox" value="'+user['id']+'" onchange="javascript:this.onChangeSelect('+user['id']+');"></td>';
html += '<td><input type="text"  id="name_'+user['id']+'"  name="name" value="'+user['name']+'"></td>';
html += '<td><input type="text" id="birthday_'+user['id']+'"  name="birthday" value="'+user['birthday']+'"></td>'
html += '<td><input type="radio"  value="M" name="gender_' +user['id']+'"';
if(user['gender'] == 'M') html += ' checked="checked"';
html += '> 男 &nbsp;&nbsp; <input type="radio"  name="gender_'+user['id']+'" value="F"';
if(user['gender'] == 'F') html += ' checked="checked"';
html += '>女</td>';
html += '<input type="button" value="保存" onclick="javascript:this.saveUser('+id+');">&nbsp;&nbsp;<input type="button" value="取消" onclick="javascript:this.cancelEditUser('+id+')"></td>';
document.getElementById('row_'+id).innerHTML = html;
}
html只认识window的对象,我要怎么改动才可以实现在html中调用这个对象中的方法呢???

解决方案 »

  1.   

    this.editUser = function (id) {
    在上面这句之前定义 var  window.aaaaa=this;
    然后在onclick里面把this换成 aaaaa
      

  2.   

    faint  你这个是个对象吧?,你最好用实例名称 替换掉这个 aaaaa
    比如:var  bbbb=new  你的func('bbbb');然后在function的定义里面引入一个参数function 你的func(canshu){//然后在onclick里面把this换成 canshu 类似
    html += '<input type="button" value="保存" onclick="javascript:'+canshu+'.saveUser('+id+');">&nbsp;&nbsp;
    }
      

  3.   

    这意思是我要把我创建的实例在当成参数传回我的function???var obj=func(obj,data);???这样也可以吗?
      

  4.   

    不行。注意是 var obj=func('obj',data);
      

  5.   

    而且 var obj必须是挂在window这一层下的
      

  6.   

    this.saveUser函数要使用window对象?这个函数写在哪了?
      

  7.   

    这个函数写在我的function()里面了啊。。我现在要写个function,一调用它就可以生成一个表格。。还可以进行添加,修改,删除操作
      

  8.   

    你那样用this对象为button对象。。创建DOM的方法来添加,不能通过设置innerHTML,要不你就需要将你的实例变量保存为全局的,然后通过实例变量来调用,这样兼容性很差    this.editUser = function (id) {
            var user = this.getUserById(id); /////////// /////////// /////////// /////////// ///////////
            var me = this; ///////////
            var tr = document.getElementById('row_' + id), td = tr.insertCell(0);
            var input = document.createElement('input');
            input.type = "checkbox";
            input.name = "selectBox"
            name.value = user['id']
            input.onchange = function () { me.onChangeSelect(user['id']); }        var html = '<td><input type="checkbox" name="selectBox" value="' + user['id'] + '" onchange="javascript:this.onChangeSelect(' + user['id'] + ');"></td>';
     /////////// /////////// /////////// /////////// ///////////        //下面的也按照上面的DOM方法来操作
            html += '<td><input type="text"  id="name_' + user['id'] + '"  name="name" value="' + user['name'] + '"></td>';
            html += '<td><input type="text" id="birthday_' + user['id'] + '"  name="birthday" value="' + user['birthday'] + '"></td>'
            html += '<td><input type="radio"  value="M" name="gender_' + user['id'] + '"';
            if (user['gender'] == 'M') html += ' checked="checked"';
            html += '> 男 &nbsp;&nbsp; <input type="radio"  name="gender_' + user['id'] + '" value="F"';
            if (user['gender'] == 'F') html += ' checked="checked"';
            html += '>女</td>';
            html += '<input type="button" value="保存" onclick="javascript:this.saveUser(' + id + ');">&nbsp;&nbsp;<input type="button" value="取消" onclick="javascript:this.cancelEditUser(' + id + ')"></td>';
            document.getElementById('row_' + id).innerHTML = html;
        };
      

  9.   

    this.editUser它的外层是啥?
    this.saveUser和editUser平级?
      

  10.   

    是的他俩平级。外层我写的function createTable()..我就是想new createTable()弄个实例初始化一下就产生一个表格
      

  11.   

    html只认识window的对象,我要怎么改动才可以实现在html中调用这个对象中的方法呢???你要调用什么方法?描述清楚你的问题。
      

  12.   

    你想在this.saveUser里面获取到这个保存按钮所在的行的其他列的值?然后给User对象?提交保存?
      

  13.   

    var obj = new createTable('obj','div_1',data);
    obj.init();
    就这样调用。但是我在createTable里面写的方法就比如上面的那个editUser里面的html不是有onclik,onchange事件,他不认识this.saveUser这样的对象方法
      

  14.   

    我真的很糊涂了。刚学这个没两天,搞不太懂下面每个都document.createElement('input');???我有好多个这样的html啊!!!
      

  15.   

    你想在this.saveUser里面获取到这个保存按钮所在的行的其他列的值?然后给User对象?提交保存?
    是的。我想获取保存按钮在的行的值,保存它们,这个保存函数我是已经写好了的。我用了刚刚wdbjsh说的方法已经实现了。可是我再new 一个实例出来就又出错了。。
      

  16.   

    明白了,你这个this.saveUser是“内部的”,也就是相当于是对象的实例方法,所以html这些事件找不到这个方法。你如果还想用这种+=html的方式,
    就在你的createTable函数最尾部加上window["editUser"]=this.editUser;等等其他this.xxx函数或者换成dom的方式
      

  17.   

    好纠结啊~我试试哦,我在外面定义数组可以直接当参数传给createTable吗?
      

  18.   

    可以这其实就是一个层级问题wdbjsh的做法是对的,他让你var obj=func('obj',data); 
    这样写就是因为你的onclick="javascript:this.saveUser(' + id + ');"中的this在运行时会window,而你的saveUser是在var obj=createTable();的obj中,obj才是属于window中,所以让你把“obj”传过去,重新链接起来。我让你
    在你的createTable函数最尾部加上window["editUser"]=this.editUser;等等其他this.xxx函数
    只是把它的层级给直接提升到window了。
      

  19.   

    你如果想要+=html,有两种方案
    1是拼接对象名,把字符串this替换掉。
    2是把saveUser提升,作为window的直接属性。要不就是dom,用代码的方式注册事件,就可以利用闭包捕获到这个saveUser函数了。
      

  20.   

    你想用“面向对象”的方式来封装这个createtable,但是它的内部却要使用+=html的方式来关联事件,这本身就冲突了。面向对象是要个个对象和属性变量之前有很强的依赖性(封装了数据和对数据的操作方法),+=html却只认得字符串,无法构建面向对象所需的那种依赖关系。+=html很方便,只是在你现在的场景中不合适。
      

  21.   

    这样啊那用什么方法比较合适呢?dom?我也觉得现在这样麻烦事一大串哦!!!
      

  22.   

    这样啊那用什么方法比较合适呢?dom?我也觉得现在这样麻烦事一大串哦!!!dom吧,你封装几个创建各种标签的函数,再用dom就方便多了