初学JS--自制计时器

之前错误的写法1:

<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf8">
<script type="text/javascript">

var sec = 1;
var timeId = setInterval("countNum(str);", 1000);


function countNum(str){


if (str == "start") {//假如用if去判断的话,sec只有增加一次,正确的写法是去掉判断直接一开始就使用里面的语句
document.getElementById("num").innerHTML = sec++;
}


if (str == "shop") {
var shopTime = clearInterval(timeId);
}
}


</script>
<font id="num">0</font>秒钟
<input type="button" value="开始" οnclick="countNum('start')">
<input type="button" value="停止" οnclick="countNum('shop')">
</html>


之前错误的写法2:


<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf8">
<script type="text/javascript">

var sec = 1;
var timeId = setInterval("countNum(str);", 1000);


function countNum(str){

document.getElementById("num").innerHTML = sec++;

if (str == "shop") {
var shopTime = clearInterval(timeId);
}
}

</script>
<font id="num">0</font>秒钟
<input type="button" value="开始" οnclick="countNum()">
<input type="button" value="停止" οnclick="countNum('shop')">
</html>


更改了上面的错误后,开始键可以使用了,但发生了新的错误,按停止键的时候id=num的文本内容在停止前会加上1,原因是停止键执行的是停止timeId的表达式,但是该表达式是指定的函数会去执行一次countNum()函数,该函数里面有第一条增加sec的值,所以还是错了,根据这个逻辑把开始和停止分开写函数终于可以正常运行了


正确的代码:

<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf8">
<script type="text/javascript">

var sec = 0;
var timeId = setInterval("countNum();", 1000);

function countNum(){

document.getElementById("num").innerHTML = sec++;
}

function shopNum(){
var shopTime = clearInterval(timeId);
}

</script>
<font id="num">0</font>秒钟
<input type="button" value="开始" οnclick="countNum()">
<input type="button" value="停止" οnclick="shopNum()">
</html>


早上运行代码又错了,

只要执行过停止键后,再按开始计时就失效了,只能没按一次加1秒,沿着逻辑往上找,终于知道原因了,因为var timeId在外面的原因,value=开始绑定了countNum函数,所有要按键才开始,而当停止过后再去执行的只是countNum()里面的函数。根据逻辑修改,成下面的版本

<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf8">
<script type="text/javascript">
var sec = 1;

function countTime(){
timeId = setInterval("document.getElementById('num').innerHTML = sec++;", 1000);
}


function countshop(){
var shopTime = clearInterval(timeId);
}




</script>
<font id="num">0</font>秒钟
<input type="button" value="开始计时" οnclick="countTime();"><!-- οnclick="countTime();" -->
<input type="button" value="停止计时" οnclick="countshop();">
<input type="button" value="从新开始" οnclick="countshop();">
</html>

问题1:为什么上面的timeId设置为全局变量,不会一开始就实行呢,难道countTime()函数被绑定了onclick事件,所以timeId调用countTime()函数才失败吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值