首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

js面向对象编程遇到个有关问题,求解惑。

2013-07-01 
js面向对象编程遇到个问题,求解惑。。。this.editUser function (id) {var user this.getUserById(id)va

js面向对象编程遇到个问题,求解惑。。。
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中调用这个对象中的方法呢???
[解决办法]
this.editUser = function (id) {
在上面这句之前定义 var  window.aaaaa=this;
然后在onclick里面把this换成 aaaaa
[解决办法]
你那样用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;
    };


[解决办法]
引用:
。。。quote]
Quote: 引用:

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

可以

这其实就是一个层级问题

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了。

热点排行