验证码倒计时

<input type="button" id="btn" value="免费获取验证码" onclick="settime(this)" /> 
<script type="text/javascript"> 
var countdown=60; 
function settime(val) { 
if (countdown == 0) { 
val.removeAttribute("disabled");  
val.value="免费获取验证码"; 
countdown = 60; 
} else { 
val.setAttribute("disabled", true); 
val.value="重新发送(" + countdown + ")"; 
countdown--; 
} 
setTimeout(function() { 
settime(val) 
},1000) 
} 
</script> 

麻烦问下这个代码使用后当时间超时时,方法会自动循环,但是删除setTimeout方法后,代码功能无法实现,请问如何解决?

阅读 2.5k
2 个回答

添加一个return ;就可以了。我试了下。
<input type="button" id="btn" value="免费获取验证码" onclick="settime(this)" />
<script type="text/javascript">

var countdown=60; 
function settime(val) { 
if (countdown == 0) { 
    val.removeAttribute("disabled");  
    val.value="免费获取验证码"; 
    countdown = 60; 
    return ; // 结束循环
} else { 
    val.setAttribute("disabled", true); 
    val.value="重新发送(" + countdown + ")"; 
    countdown--; 
} 
setTimeout(function() { 
    settime(val) 
    },1000) 
} 

</script>

倒计时的逻辑和dom控制耦合在一起了,最好把操作dom的代码从倒计时里面独立出来,用钩子函数代替

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题