游客:
注册
|
登录
|
会员
|
搜索
|
统计
|
帮助
无忧脚本
»
JavaScript & VBScript & DHTML 脚本技术讨论版
» js循环创建添加事件,值不正确
‹‹ 上一主题
|
下一主题 ››
投票
交易
悬赏
活动
打印
|
推荐
|
订阅
|
收藏
标题:
[求助]
js循环创建添加事件,值不正确
pblover
小虫
UID 78912
精华 0
积分 11
帖子 6
威望 6
阅读权限 10
注册 2007-11-15
状态 离线
#1
大
中
小
使用道具
发表于 2007-12-3 20:48
资料
个人空间
短消息
加为好友
js循环创建添加事件,值不正确
请教一下,我用循环创建了LI,然后我在创建LI后再在每个LI上添加事件,然而,每次触发事件事,得到的总是最后一个事件的值,请教有什么好的方法可以解决,在线等谢谢!!!
addRoom:function()
{
var self = this;
var amount = 3;
var roomMemberList = new Array();
// validate
/* if(getRoomList().length < 60)
{
amount = getRoomList().length;
}
*/
// create room list array
this.LIRoomList = new Array();
// add room to list
for(i = 0; i < amount; i++){
// create room list li
eval('this.LIRoomList[' + i + '] = document.createElement("li");');
eval('this.LIRoomList[' + i + '] .className = "LI_Room_List"; ');
eval('this.LIRoomList[' + i + '].id = "LIRoomList"; ');
eval('this.ULRoomList.appendChild(this.LIRoomList[' + i + ']); ');
// create room name span
this.spanRoomName = document.createElement("span");
this.spanRoomName.className = "Span_Room_Name";
this.spanRoomName.innerText = "newtouch";
eval('this.LIRoomList[' + i + '].appendChild(this.spanRoomName);');
// create room state span
this.spanRoomState = document.createElement("span");
this.spanRoomState.className = "Span_Room_State";
this.spanRoomState.innerText = ConferenceConstants.IN_USE_STATE_STRING;
eval('this.LIRoomList[' + i + '].appendChild(this.spanRoomState);');
// this.LIRoomList[i].onmouseover = function(){WatchRoomUI.initWatchRoomUI(/*roomMemberList,over*/)};
if(i == 0){
roomMemberList[0] = "casfasdfsdafsad";
}else{
roomMemberList[0] = "InviteCnfUI";
}
uccommon.traceLog(i+"+++"+roomMemberList[0],"initReminderUI-----I'M IN");
eval('this.LIRoomList[' + i +'].onmouseenter = function(){WatchRoomUI.initWatchRoomUI(/*roomMemberList,over*/roomMemberList)};');
// this.LIRoomList[i].onmousemove = function(){self.showTip()};
eval('this.LIRoomList[' + i +'].onmouseleave = function(){WatchRoomUI.deleteWatchRoomUI()};');
// this.spanRoomState.onclick = function(){self.setFlyout(ConferenceConstants.IN_USE_STATE_STRING)};
}
}
[[i] 本帖最后由 pblover 于 2007-12-3 20:55 编辑 [/i]]
chpn
大恐龙
UID 61902
精华
1
积分 754
帖子 322
威望 361
阅读权限 50
注册 2006-12-11
状态 离线
#2
大
中
小
使用道具
发表于 2007-12-4 09:49
资料
个人空间
短消息
加为好友
看上去楼上的喜欢走弯路
实不明白 ,难道
QUOTE:
eval('this.LIRoomList[' + i + '] = document.createElement("li");');
会比
QUOTE:
this.IRoomList[i] = document.createElement("li");
更有效,或是更好用
对eval这个函数竟如此的亲睐.
使用代理方式
function delegate(方法,参数,附加对象){
return function(){
方法.call(附加对象||window,参数)
}
}
this.LIRoomList[i].onmouseover = delegate(WatchRoomUI.initWatchRoomUI, roomMemberList , WatchRoomUI);
这样就可解决问题,并可防止内在泄漏
无论走到哪里,我的家都只有一个。。那就是重庆。
chpn
大恐龙
UID 61902
精华
1
积分 754
帖子 322
威望 361
阅读权限 50
注册 2006-12-11
状态 离线
#3
大
中
小
使用道具
发表于 2007-12-4 09:52
资料
个人空间
短消息
加为好友
看上去楼上的喜欢走弯路
实不明白 ,难道
QUOTE:
eval('this.LIRoomList[' + i + '] = document.createElement("li");');
会比
QUOTE:
this.IRoomList[i] = document.createElement("li");
更有效,或是更好用
对eval这个函数竟如此的亲睐.
使用代理方式
function delegate(方法,参数,附加对象){
return function(){
方法.call(附加对象||window,参数)
}
}
this.LIRoomList[i].onmouseover = delegate(WatchRoomUI.initWatchRoomUI, roomMemberList , WatchRoomUI);
这样就可解决问题,并可防止内在泄漏
无论走到哪里,我的家都只有一个。。那就是重庆。
lonely~
小虫
UID 78933
精华 0
积分 32
帖子 11
威望 10
阅读权限 10
注册 2007-11-15
状态 离线
#4
大
中
小
使用道具
发表于 2007-12-5 17:01
资料
个人空间
短消息
加为好友
回复 #3 chpn 的帖子
请教chpn兄台了。
请问您的代码中避免内存泄漏的关键是哪部分?
谢谢。
chpn
大恐龙
UID 61902
精华
1
积分 754
帖子 322
威望 361
阅读权限 50
注册 2006-12-11
状态 离线
#5
大
中
小
使用道具
发表于 2007-12-6 09:42
资料
个人空间
短消息
加为好友
讨论过很多次了,翻翻老贴就知道
ie内泄漏通常是对DOM元素循环引用引起。
比如下面的例子就可引起内存泄漏,除非手动将 d 设为空,或清除test中对d设定的onclick事件
function test(){
var d = document.getElementById("xxxx");
d.onclick = function(){
}
}
test();
无论走到哪里,我的家都只有一个。。那就是重庆。
lonely~
小虫
UID 78933
精华 0
积分 32
帖子 11
威望 10
阅读权限 10
注册 2007-11-15
状态 离线
#6
大
中
小
使用道具
发表于 2007-12-6 22:25
资料
个人空间
短消息
加为好友
我还是不太理解。所以在这边较个真儿,呵呵。
代码
function test(){
var d = document.getElementById("xxxx");
d.onclick = function(){
}
}
test();
中并没有建立function(){}对d的引用。循环引用从何而来?
而这段代码
function delegate(方法,参数,附加对象){
return function(){
方法.call(附加对象||window,参数);
}
}
d.onsomething=delegate(方法,参数,d);
中的闭包function(){}依然引用了d,循环引用何以避免?
请教。
[[i] 本帖最后由 lonely~ 于 2007-12-6 22:54 编辑 [/i]]
投票
交易
悬赏
活动
最近访问的论坛 ...
参考手册、常用软件资源库
ASP & Access & SQL Server 后台编程讨论版
Html & XHtml & CSS 网页制作讨论版
原创文章 & 讨论汇总版
Flex & Flash 技术讨论版
经典代码、教程资源库
休闲留言板
无忧脚本
无忧脚本技术讨论区
> 原创文章 & 讨论汇总版
> Html & XHtml & CSS 网页制作讨论版
> JavaScript & VBScript & DHTML 脚本技术讨论版
> XML & XSL & XPath & VML 网页技术讨论版
> ASP & Access & SQL Server 后台编程讨论版
> PHP & MySQL 后台编程讨论版
> JSP & Java & J2SE 后台编程讨论版
> .Net 相关技术讨论版
> Web 服务器技术
> Flex & Flash 技术讨论版
> Web UI & 图形技术讨论版
无忧脚本资源服务区
> 经典代码、教程资源库
> 参考手册、常用软件资源库
> 无忧合租服务器讨论版
无忧脚本休闲区
> 休闲留言板
> 招聘求职、网站推荐、广告信息版
> 无忧站务管理版
> 垃圾帖回收站
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
升级个人空间
基本概况
流量统计
客户软件
发帖量记录
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
当前时区 GMT+8, 现在时间是 2010-7-31 04:54
苏ICP备05080427号
Powered by
Discuz!
5.5.0
© 2001-2007
51JS.COM
Processed in 0.232311 second(s), 8 queries , Gzip enabled
TOP
清除 Cookies
-
联系我们
-
无忧脚本
-
Archiver