浏览 3690 次
锁定老帖子 主题:js中setTimeout的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-25
最后修改:2010-01-23
<script type="text/javascript" src="script/jquery-1.2.6.js"></script> <script type="text/javascript"> $(document).ready(function(){ }) var age = 1; function AddIt(){ age = $("#yourAge").val(); alert(age); age ++; $("#yourAge").val(age); setTimeout("AddIt()",1000); } //$("#yourAge").blur(function(){ AddIt(); //}) </script> <input type="text" id="yourAge" value="4" > 文本框内的数字每隔一秒会自动加1. 可是如果将代码放到$().ready(function(){})中,就会出错,或者将注释去掉,由离开焦点来触发函数,同样会出错。google了一下也没有得到结果。希望js高手能解答。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-28
是大家都不会,还是我没有把问题描述清楚。怎么没人帮忙。。
|
|
返回顶楼 | |
发表时间:2009-05-07
引了第三方包的程序
很多人都懒得去测试 最多大概看一下。。。 我怎么感觉只有放在ready中才会成功执行啊 页面没加载完就执行 它能取得到页面得元素么 还有报啥错你也不说下? |
|
返回顶楼 | |
发表时间:2009-05-07
最后修改:2009-05-08
补充下问题(代码2)
$(document).ready(function(){ }) var age = 1; function AddIt(){ age = $("#yourAge").val(); alert(age); age ++; $("#yourAge").val(age); setTimeout("AddIt()",1000); } //AddIt(); <input type="text" id="yourAge" value="4" onblur="AddIt()">当我在text文本框内,事件onblur会触发AddIt()函数,AddIt()函数内部实现了setTimeout方法来回调AddIt()函数本身,当触发onblur事件时,每隔1秒age+1,并弹出,在这个程序里没有错误。 但是在1楼的代码,如果代码修改成这样(代码3) $(document).ready(function(){ $("#yourAge").blur(function(){ AddIt(); }) }) var age = 1; function AddIt(){ age = $("#yourAge").val(); alert(age); age ++; $("#yourAge").val(age); setTimeout("AddIt()",1000); } <input type="text" id="yourAge" value="4"> 也是可行的,就是说如果将事件onblur放到jquery的ready中,代码也会正常运行。 当直接去掉注释,onblur没有触发,但也没有出错,在我的本机是没有问题的(ie7),但是此问题是在公司发现的(ie6),报错。 所以猜测不是函数本身的问题,而是jquery的ready方法问题,怀疑ready是否是只是单纯的js中onload的作用。 经过google得到一些关于ready的资料。 1,方法若不写在ready中,只会执行一次比如绑定click事件。 不是很理解这句话的意思。就我目前的理解是:ready之外的方法不能做自身的循环调用,如果是这样解释就一切明白了。 1楼代码中去掉注释之后,在公司里只是执行了一次,然后就报错误的原因。(在我本机没有触发onblur事件,也没有报错误,估计是浏览器的支持效果不一样),而代码3就正常运行。 |
|
返回顶楼 | |
发表时间:2009-05-08
最后修改:2009-05-08
//IE或不是frame的window
if (jQuery.browser.msie && window == top) (function() { if (jQuery.isReady) return; try { // 在ondocumentready之前,一直都会抛出异常 // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch (error) { //一直运行bindReady()(=arguments.callee) setTimeout(arguments.callee, 0); return; } jQuery.ready();//documentready就运行jQuery.ready })(); //最后只能依赖于window.load. jQuery.event.add(window, "load", jQuery.ready); 是否由于这句话? 可以下载一下原码...试一下 我用的不是IE |
|
返回顶楼 | |