关于setTimeout多次点击会多次执行方法导致运行速度加快的问题

有的网友在刚刚入门学习setTimeout这个函数时,往往会拿一些例子进行测试,比如:
<script type="text/javascript">
var num=0;
function numCount(){
	document.getElementById('txt').value=num;
	num=num+1;
	setTimeout("numCount()",1000);
}
</script>
<pre class="html" name="code"><form>
	<input type="text" id="txt" />
	<input type="button" value="Start" onClick="numCount()" />
</form>
 



这样写会产生的一个后果就是:随着点击次数的增加,数字变化的速率会越来越快,因为你的事件正在一次次覆盖执行。这时不妨对点击事件进行下限制:
window.onload = function(){
    var num=0;
	var cishu = 0;//判断函数执行次数
	document.getElementById('start').onclick = function(){
		++ cishu;
		if (cishu < 2) {
			startCount();
		}
	}
    function startCount() {
		document.getElementById('count').value = num;
		num=num+1;
		setTimeout(startCount, 1000);
	}
}



在与clearTimeout结合时,也可以对其进行制约:
	window.onload = function(){
		var num=0;
		var cishu1 = 0;//判断start点击函数执行次数
		var cishu2 = 1;//判断stop点击函数执行次数
		var i;//用来传递setTimeout

		document.getElementById('start').onclick = function(){
			cishu2 = 0;
			if (cishu1 == cishu2) {
				startCount();
			}
			++ cishu1;
		}
		function startCount() {
			document.getElementById('count').value = num;
			num=num+1;
			i = setTimeout(startCount, 1000);
		}

		document.getElementById('stop').onclick = function(){
			cishu1 = 0;
			if (cishu1 == cishu2) {
				clearTimeout(i);
			}
			++ cishu2;
		}
	}

(ps:本人也在学习中,如上述代码有bug或者更简单的方式,欢迎批评指教)



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值