BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #8858同步于 2009/10/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

[求助]这段JS代码的问题出在哪里?(用了jQuery库)

eminemheaton
2009/10/21镜像同步5 回复
<html> <body bgcolor="white"> <!-- 引入jQuery库 --> <script src="common/jquery-1.2.6.min.js" type="text/javascript"></script> <div id="out1" style="width:300px;height:200px;border:1px solid black;"> <!-- 静态的DIV --> <div id="in1" style="width:300px;height:100px;">in1</div> <div id="in2" style="width:300px;height:100px;">in2</div> </div> <div id="out2" style="width:300px;height:200px;border:1px solid black;"> <!-- 动态生成DIV --> </div> <input type="button" id="button1" value="点击我生成div!"><br> <input type="button" id="button2" value="更改div内的div的onmouseover属性!"> <script language="javascript"> var count = 1; $("#button1").click(function(){ var d = document.createElement("div"); d.innerHTML = "生成的div:" + count; d.style.height = "25px"; count++; $("#out2").append(d); }); //延迟计时器 var timer; $("#button2").click(function(evt){ $("div div").mouseover(function(evt){ evt = evt || window.event; //取事件源 火狐||IE //延迟,1秒后才执行myShow方法。 function myShow() { var src = evt.target || evt.srcElement; //火狐||IE $(src).css("background-color","#cccccc"); } timer = setTimeout(myShow,1000); }); $("div div").mouseout(function(evt) { //取消定时器 clearTimeout(timer); evt = evt || window.event; var src = evt.target || evt.srcElement; $(src).css("background-color","#ffffff"); }); }); </script> </body> </html> 自己写的一段代码, 就是点击第二个按钮后,设置2个外层div的里层的div的onmouseover、onmuoseout属性,让鼠标在上面待超过一秒后改变其背景颜色,鼠标移出后背景色恢复白色。 问题出在这里: 第一次点击“更改div内的div的onmouseover属性”按钮后运行状况没问题, 但再点一次“更改div内的div的onmouseover属性”按钮后,貌似onmouseout就不起作用了,各div的背景颜色的改变不听控制了,鼠标移出后背景颜色还是不变回来。但是如果去掉定有关时器的代码就又不会出问题了。 真看不出来问题在哪了,请大家帮忙!
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
ericyosho机器人#1 · 2009/10/21
后面的也不是不听话了。感觉就是你移到那个元素上面,然后过1S它就变灰了。 如果在这个期间,鼠标已经从该元素上移走了,那么就没有机会执行clearTimeout,所以就一直灰着。
ericyosho机器人#2 · 2009/10/21
比较好的方法是,当按下button2的时候,就把它变灰。这就是user friendly,而且让用户始终在可控的范围内。
eminemheaton机器人#3 · 2009/10/22
【 在 ericyosho 的大作中提到: 】 : 比较好的方法是,当按下button2的时候,就把它变灰。这就是user friendly,而且让用户始终在可控的范围内。 谢谢,这是个解决方法 但还是不明白 为什么第一次点击点button2运行没问题 第二次点button2后,对已经设置过onmuouseover属性的div,取消定时器有时候就不起作用了 明明两次点击执行的代码都是一样的啊。。。
ericyosho机器人#4 · 2009/10/22
再给一点点小现象吧。 你每点一次button2,就会在原来的基础上,加上一个处理函数。 比如,我在变黑以前加了alert()语句,那么点过一次button2,就执行一次alert() 点过两次button2,就执行两次alert()。 我觉得和这个可能有点关系。
eminemheaton机器人#5 · 2009/10/23
谢啦 应该是和注册了两次函数有关。。。。