JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)

发布时间 - 2026-01-11 02:14:31    点击率:

应用场景

在开发“发送短信验证”功能时候,要解决一个问题,防止恶意或频繁发送短信验证码问题。一般原理是“当点击发送按钮时,发送ajax请求到服务器发送短信验证码,成功则把发送按钮设置为不可点击,并且调用定时器,按钮显示倒计时”。如果就这样不对倒计时存储做处理,那么当刷新页面,会出现倒计时失效,按钮可点击。提供以下解决方案:

  • 利用cookie存储倒计时
  • 利用HTML5的localStorage 存储倒计时

利用cookie存储倒计时

发送成功后把剩余倒计时存储到cookie,当页面刷新时,检查cookie 是否还存储着剩余倒计时?,如果有,发送按钮则保持倒计时状态,不可点击,否则发送按钮可点击。

HTML代码

<input type="button" id="btn" disabled="disabled" value="获取验证码">

jQuery代码

<!--引入jquery.cookie.js 插件-->
<script src="http:jquery.cookie.js" type="text/javascript" charset="utf-8"></script>
<!--逻辑功能代码 -->
<script>
  $(function(){
   if($.cookie("total")!=undefined&&$.cookie("total")!='NaN'&&$.cookie("total")!='null'){//cookie存在倒计时
     timekeeping();
   }else{//cookie 没有倒计时
     $('#btn').attr("disabled", false);
   }
   function timekeeping(){
    //把按钮设置为不可以点击
    $('#btn').attr("disabled", true);
    var interval=setInterval(function(){//每秒读取一次cookie
     //从cookie 中读取剩余倒计时
     total=$.cookie("total");
     //在发送按钮显示剩余倒计时
     $('#btn').val('请等待'+total+'秒');
     //把剩余总倒计时减掉1
     total--;
     if(total==0){//剩余倒计时为零,则显示 重新发送,可点击
     //清除定时器
     clearInterval(interval);
     //删除cookie
     total=$.cookie("total",total, { expires: -1 });
     //显示重新发送
     $('#btn').val('重新发送');
     //把发送按钮设置为可点击
     $('#btn').attr("disabled", false);
     }else{//剩余倒计时不为零
     //重新写入总倒计时
     $.cookie("total",total);
     }
    },1000);
   }
   //绑定发送按钮
    $('#btn').click(function(event) {
   /* Act on the event */
   // alert($("#btn").val());
   //校验手机号码
   var phone=$('#phone').val();
   var pre=/^[1][358][0-9]{9}$/;
   if(phone==''){
     layer.open({
       content: '手机号码不能为空',
       time: 2
     });
     return this;
   }else{
     var pre=/^[1][358][0-9]{9}$/;
     if(!pre.test(phone)){
      layer.open({
        content: '手机号码格式有误!',
        time: 2
      });
       return this;
     }
   }
   $.ajax({
    url: '',//服务器发送短信
    type: 'GET',
    dataType: 'json',
    data: {phone: phone},
   })
   .done(function(re) {
      var str="发送短信验证码成功,请注意查看您的手机";
      // console.log(re);
      if(re){
        $.cookie("total",60);
        timekeeping();
      }else{
        switch (re[0]) {
         case '160038':
          str="短信验证码发送过频繁";
          break; 
         case '160034':
          str="号码黑名单";
          break; 
         case '160000':
          str="系统错误";
          break;
         case '000000':
          str="发送成功";
          break;
         case '112300':
          str="接收短信的手机号码为空";
          break; 
         case '160040':
          str="验证码超出发送上限";
          break;
         case '160042':
          str="号码格式有误";
          break; 
         default:
          str="发送验证码失败";
          break;
        }
      }
      layer.open({
         content: str,
         time: 2
       });
   })
   .fail(function() {
    console.log("error");
   })
   .always(function() {
    console.log("complete");
   });
  });
  })
</script>

以上所述是小编给大家介绍的JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# js发送短信验证码倒计时  # JS+HTML5实现获取手机验证码倒计时按钮  # JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】  # Angular.js实现获取验证码倒计时60秒按钮的简单方法  # 点击按钮出现60秒倒计时的简单js代码(推荐)  # js代码实现点击按钮出现60秒倒计时  # JS自动倒计时30秒后按钮才可用(两种场景)  # JS按钮倒计时并跳转到新地址的实现代码  # 倒计时  # 验证码  # 发送短信  # 设置为  # 小编  # 为零  # 为空  # 您的  # 在此  # 不可以  # 给大家  # 请注意  # 一个问题  # 所述  # 绑定  # 给我留言  # 感谢大家  # 则把  # 疑问请  # 有任何 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 详解MySQL数据库的安装与密码配置  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  长沙企业网站制作哪家好,长沙水业集团官方网站?  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  javascript日期怎么处理_如何格式化输出  如何快速生成橙子建站落地页链接?  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  Laravel如何配置和使用缓存?(Redis代码示例)  EditPlus中的正则表达式 实战(1)  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel如何使用Collections进行数据处理?(实用方法示例)  Laravel如何使用Sanctum进行API认证?(SPA实战)  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  EditPlus中的正则表达式实战(6)  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Python图片处理进阶教程_Pillow滤镜与图像增强  Laravel怎么调用外部API_Laravel Http Client客户端使用  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  微信小程序 HTTPS报错整理常见问题及解决方案  香港服务器网站卡顿?如何解决网络延迟与负载问题?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  如何在局域网内绑定自建网站域名?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  如何用JavaScript实现文本编辑器_光标和选区怎么处理  Python文本处理实践_日志清洗解析【指导】  黑客如何通过漏洞一步步攻陷网站服务器?  如何用PHP快速搭建高效网站?分步指南  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何在建站之星绑定自定义域名?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  利用python获取某年中每个月的第一天和最后一天  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  详解Android图表 MPAndroidChart折线图  浅谈redis在项目中的应用  JavaScript实现Fly Bird小游戏  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  Laravel怎么为数据库表字段添加索引以优化查询