IE里的attachEvent不好用啊, 谁来帮我改一改.

xiao7cn 2007-11-29 06:30:55

注:不要用onmouseout=function(){}这种的,因为我要添加多个事件处理器.
---------------------






<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script defer="defer">
function hightlight(obj)
{
obj.style.backgroundColor='#999999';
}
function normal(obj)
{
obj.style.backgroundColor='';
}
for(var i=1;i<=3;i++)
{
var obj = document.getElementById('item'+i);
obj.attachEvent('onmouseover',function(){hightlight(obj)});
obj.attachEvent('onmouseout',function(){normal(obj)});
}
</script>
</head>

<body>
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td id="item1"> </td>
</tr>
<tr>
<td id="item2"> </td>
</tr>
<tr>
<td id="item3"> </td>
</tr>
</table>
</body>
</html>
...全文
232 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
iasybvm 2010-12-10
  • 打赏
  • 举报
回复
呃,带来的另一个问题是,不能detachevent
CMonk 2010-11-23
  • 打赏
  • 举报
回复
匿名方法而已...闭包拿这里来干嘛....
gzdiablo 2007-11-30
  • 打赏
  • 举报
回复
IE里面的attachEvent是有点不爽 本来事件方法执行时this应该是本元素实例 但IE下却是window 没法只能用闭包给事件方法一个相对独立的变量参数才能访问
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title> 无标题文档 </title>

</head>

<body>
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td id="item1">  </td>
</tr>
<tr>
<td id="item2">  </td>
</tr>
<tr>
<td id="item3">  </td>
</tr>
</table>
</body>
</html>
<script language="javascript">
function hightlight(o)
{
o.style.backgroundColor='#999999';
}
function normal(o)
{
o.style.backgroundColor='';
}
function addEvent(obj)
{
//这里就是闭包 参数obj在这个闭包里是相对独立的
obj.attachEvent('onmouseover',function(){hightlight(obj);});
obj.attachEvent('onmouseout',function(){normal(obj);});
}
for(var i=1;i<=3;i++)
addEvent(document.getElementById('item'+i));

</script>
muxrwc 2007-11-30
  • 打赏
  • 举报
回复
循环的过程中。。
var obj = document.getElementById('item' + i);
一直在改变,而那些function里引用的正是obj
所以,一直到循环结束
obj 的最后结果是最后一次循环的结果。。
所以
所有遍历的function里都是引用的最后一次的obj的结果。。。

而闭包,则重新复制了每次循环的obj的引用,每次的function引用了复制的那些变量。
所以,实现了效果。。。

关于闭包。。。
http://blog.csdn.net/muxrwc/archive/2007/11/09/1876342.aspx
这里有介绍。。。
也可以去google or baidu 上艘下。。。:D
rotApple 2007-11-30
  • 打赏
  • 举报
回复
那我就不回答了
xiao7cn 2007-11-30
  • 打赏
  • 举报
回复
很好,结了
nicholsky 2007-11-30
  • 打赏
  • 举报
回复
一见到function包function我就晕,还没消化,学习。
zheng-zx 2007-11-29
  • 打赏
  • 举报
回复
果然是高手啊
xiao7cn 2007-11-29
  • 打赏
  • 举报
回复
闭包....

好费解啊...
muxrwc 2007-11-29
  • 打赏
  • 举报
回复
闭包。。。
解决方法如下。。。


for (var i = 1 ; i < 4;i ++) {
var obj = document.getElementById('item' + i);
obj.attachEvent('onmouseover',
function (o) {
return function (e) { hightlight(o); }
}(obj)
);
obj.attachEvent('onmouseout',
function (o) {
return function (e) { normal(o); }
}(obj)
);
}

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧