论坛首页 入门技术论坛

js中setTimeout的问题

浏览 3690 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-25   最后修改:2010-01-23
    昨天在公司里写了个程序,发现js中setTimeout这块代码出错,于是写了一小段代码专门来测试,便遇到一个不解的问题。看代码。
<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高手能解答。
   发表时间:2009-04-28  
是大家都不会,还是我没有把问题描述清楚。怎么没人帮忙。。
0 请登录后投票
   发表时间:2009-05-07  
引了第三方包的程序
很多人都懒得去测试
最多大概看一下。。。

我怎么感觉只有放在ready中才会成功执行啊
页面没加载完就执行
它能取得到页面得元素么

还有报啥错你也不说下?
0 请登录后投票
   发表时间: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就正常运行。
0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics