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


Posted in Javascript onJuly 07, 2017

应用场景

在开发“发送短信验证”功能时候,要解决一个问题,防止恶意或频繁发送短信验证码问题。一般原理是“当点击发送按钮时,发送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实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
让JavaScript拥有类似Lambda表达式编程能力的方法
Sep 12 Javascript
js 浏览器事件介绍
Mar 30 Javascript
JS对HTML标签select的获取、添加、删除操作
Oct 17 Javascript
javascript快速排序算法详解
Sep 17 Javascript
jquery模拟进度条实现方法
Aug 03 Javascript
基于javascript实现右下角浮动广告效果
Jan 08 Javascript
D3.js实现雷达图的方法详解
Sep 22 Javascript
JS传参及动态修改页面布局
Apr 13 Javascript
vue.js实现图书管理功能
Sep 24 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
Nov 19 Javascript
vue中keep-alive、activated的探讨和使用详解
Jul 26 Javascript
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
详解vue.js+UEditor集成 [前后端分离项目]
Jul 07 #Javascript
JS实现搜索关键词的智能提示功能
Jul 07 #Javascript
vue.js国际化 vue-i18n插件的使用详解
Jul 07 #Javascript
javascript ES6 新增了let命令使用介绍
Jul 07 #Javascript
微信小程序之绑定点击事件实例详解
Jul 07 #Javascript
分享19个JavaScript 有用的简写写法
Jul 07 #Javascript
Vue.js数据绑定之data属性
Jul 07 #Javascript
You might like
用来解析.htgroup文件的PHP类
2012/09/05 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
广告显示判断
2006/08/31 Javascript
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
Angular路由简单学习
2016/12/26 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
Python制作词云图代码实例
2019/09/09 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
美国在线印刷公司:PsPrint
2017/10/12 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
书法比赛获奖感言
2014/02/10 职场文书
公益广告语集锦
2014/03/13 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
入党转正申请书范文
2019/05/20 职场文书
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android