读书人

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

发布时间: 2013-07-01 12:33:04 作者: rapoo

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 += '> 男    <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+');">  <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对象。。创—OM的方法来添加,不能通过设置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 += '> 男    <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 + ');">  <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了。

读书人网 >JavaScript

热点推荐