博客
关于我
js代码实现点击按钮出现60秒倒计时
阅读量:200 次
发布时间:2019-02-28

本文共 4058 字,大约阅读时间需要 13 分钟。

比如,一些网站上的手机短信认证的功能,有类似实现点击按钮后,倒计时60秒才能再次点击发送的效果。

此例子用Javascript实现点击按钮后,倒计时60秒才能再次点击发送验证码的功能。

例子1:Javascript 实现 点击按钮 倒计时60秒方可再次点击发送的效果

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

例子2:点击按钮出现60秒倒计时js代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script type="text/javascript" src="js/jquery.js"></script> </head> <body> <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> </body> </html>

例子3:点击按钮后,60秒倒计时后才能继续可以点击,按钮上还能显示倒计时

预想的效果图:

这是微信公众平台上的代码

function E() {var e = $("#mobile"), t = (new Date).getTime(), n = Math.floor((t - b) / 1e3);g && clearTimeout(g), n >= 60 ? (e.prop("readonly", !1), y = !0, $("#sendmobile").html("发送验证码").attr("disabled", !1).removeClass("btn_disabled")) : (e.prop("readonly", !0), y = !1, $("#sendmobile").attr("disabled", !0).addClass("btn_disabled").html("%s秒后可重发".sprintf(60 - n)), g = setTimeout(E, 1e3));}function S() {function e() {if (!y) return;var e = $.trim(n.val());l.mobile(e) ? t.attr("disabled", !1).removeClass("btn_disabled") : t.attr("disabled", !0).addClass("btn_disabled");}var t = $("#sendmobile"), n = $("#mobile");n.keyup(e).blur(e), e(), t.click(function() {var e;t.attr("disabled") !== "disabled" && (e = "+86" + $.trim(n.val()), b = (new Date).getTime(), E(), o.post({url: w ? "/cgi-bin/formbyskey" : "/acct/formbyticket",data: {form: "mobile",action: "set",f: "json",mobile: e},mask: !1}, function(e) {var t = e.BaseResp.Ret;if (t == 0) u.suc("验证码已经发送"); else {switch (t) {case -13:u.err("登录超时,请重新登录");break;case -35:u.err("该手机已经登记过2次,请使用别的手机号进行用户信息登记");break;default:u.err("验证码发送失败");}b = 0;}}));});}

这段代码小编就是不知道怎么才能调用到自己的代码上来,经过高人指点有了一些头寻。

高人的解题思路:如果严格的话,这个还要结合后台获取时间的,要不然别人刷新一下就行了。
                            如果不严格,用个cookie也可以。

<script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script><script src="http://yukon12345.com/yukon12345.com/js/jquery.cookie.js"></script><script> time1=$.cookie("time1")||60; time2=$.cookie("time2")||60; dis1=$.cookie("dis1") dis2=$.cookie("dis2") function countDown($obj){ var time; if($obj.attr("id")=="b1") {  time=--time1;  $.cookie("time1",time,{"expires":1});  if(time<=0){  time1=60;  $obj[0].disabled=!$obj[0].disabled  clearInterval(inter1)  $obj.text("点击发送")  $.cookie("dis1","")  return  } } if($obj.attr("id")=="b2") { time=--time2;  $.cookie("time2",time,{"expires":1});  if(time<=0){  time1=60;  $obj[0].disabled=!$obj[0].disabled  clearInterval(inter2)  $obj.text("点击发送")  $.cookie("dis2","")  return  } } $obj.text(time+"秒后重新发送") } $(function(){ if(dis1="dis"){  $("#b1")[0].disabled='disabled'  inter1=setInterval(function(){countDown($("#b1"))},1000) } if(dis2="dis"){  $("#b2")[0].disabled='disabled'  inter2=setInterval(function(){countDown($("#b2"))},1000) }$(".cd").bind("click",function(){ $this=$(this); //没有被禁用时禁用并执行倒计时 if(!$this[0].disabled){ $this[0].disabled='disabled'; if($this.attr("id")=="b1"){  $.cookie("dis1","dis",{"expires":1})  inter1=setInterval(function(){countDown($this)},1000) } if($this.attr("id")=="b2"){  $.cookie("dis2","dis",{"expires":1})  inter2=setInterval(function(){countDown($this)},1000) } }})})</script><button id="b1" class="cd" >点击发送</button><br><button id="b2" class="cd" >点击发送</button><br>

更多关于倒计时的文章请查看专题: 

转载地址:http://neoi.baihongyu.com/

你可能感兴趣的文章
Nginx配置参数中文说明
查看>>
nginx配置域名和ip同时访问、开放多端口
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置如何一键生成
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Nginx配置负载均衡到后台网关集群
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>