js实现发送验证码后的倒计时功能


Posted in Javascript onMay 28, 2015

之前分享过只用js实现倒计时的功能,后来测试时发现,刷新或关闭网页后,倒计时就不能用了.网上也没找到合适的解决方案,所以自己就写了个,这次的算是优化版吧,能满足刷新或重新打开网页后,倒计时依然能用

特别说明:

     cookie最初创建的有效时间是60秒.也就是说,你如果在倒计时为20的时候,关闭网页.20秒之后再打开,是不会有倒计时显示的;但是,如果倒计时为20时,关闭页面,如果在20秒内重新打开页面,是有倒计时显示的.

html代码

<input id="second" type="button" value="免费获取验证码" />

js对cookie的操作

//发送验证码时添加cookie
function addCookie(name,value,expiresHours){ 
  var cookieString=name+"="+escape(value); 
  //判断是否设置过期时间,0代表关闭浏览器时失效
  if(expiresHours>0){ 
    var date=new Date(); 
    date.setTime(date.getTime()+expiresHours*1000); 
    cookieString=cookieString+";expires=" + date.toUTCString(); 
  } 
    document.cookie=cookieString; 
} 
//修改cookie的值
function editCookie(name,value,expiresHours){ 
  var cookieString=name+"="+escape(value); 
  if(expiresHours>0){ 
   var date=new Date(); 
   date.setTime(date.getTime()+expiresHours*1000); //单位是毫秒
   cookieString=cookieString+";expires=" + date.toGMTString(); 
  } 
   document.cookie=cookieString; 
} 
//根据名字获取cookie的值
function getCookieValue(name){ 
   var strCookie=document.cookie; 
   var arrCookie=strCookie.split("; "); 
   for(var i=0;i<arrCookie.length;i++){ 
    var arr=arrCookie[i].split("="); 
    if(arr[0]==name){
     return unescape(arr[1]);
     break;
    }else{
       return ""; 
       break;
     } 
   } 
    
}

主要逻辑代码

$(function(){
  $("#second").click(function (){
    sendCode($("#second"));
  });
  v = getCookieValue("secondsremained");//获取cookie值
  if(v>0){
    settime($("#second"));//开始倒计时
  }
})
//发送验证码
function sendCode(obj){
  var phonenum = $("#phonenum").val();
  var result = isPhoneNum();
  if(result){
    doPostBack('${base}/login/getCode.htm',backFunc1,{"phonenum":phonenum});
    addCookie("secondsremained",60,60);//添加cookie记录,有效时间60s
    settime(obj);//开始倒计时
  }
}
//将手机利用ajax提交到后台的发短信接口
function doPostBack(url,backFunc,queryParam) {
  $.ajax({
    async : false,
    cache : false,
    type : 'POST',
    url : url,// 请求的action路径
    data:queryParam,
    error : function() {// 请求失败处理函数
    },
    success : backFunc
  });
}
function backFunc1(data){
  var d = $.parseJSON(data);
  if(!d.success){
    alert(d.msg);
  }else{//返回验证码
    alert("模拟验证码:"+d.msg);
    $("#code").val(d.msg);
  }
}
//开始倒计时
var countdown;
function settime(obj) { 
  countdown=getCookieValue("secondsremained");
  if (countdown == 0) { 
    obj.removeAttr("disabled");  
    obj.val("免费获取验证码"); 
    return;
  } else { 
    obj.attr("disabled", true); 
    obj.val("重新发送(" + countdown + ")"); 
    countdown--;
    editCookie("secondsremained",countdown,countdown+1);
  } 
  setTimeout(function() { settime(obj) },1000) //每1000毫秒执行一次
} 
//校验手机号是否合法
function isPhoneNum(){
  var phonenum = $("#phonenum").val();
  var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/; 
  if(!myreg.test(phonenum)){ 
    alert('请输入有效的手机号码!'); 
    return false; 
  }else{
    return true;
  }
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JS 文件大小判断的实现代码
Apr 07 Javascript
jquery中子元素和后代元素的区别示例介绍
Apr 02 Javascript
jQuery实现切换字体大小的方法
Mar 10 Javascript
jQuery插件datalist实现很好看的input下拉列表
Jul 14 Javascript
使用gulp搭建本地服务器并实现模拟ajax
Apr 05 Javascript
详解webpack + react + react-router 如何实现懒加载
Nov 20 Javascript
解决使用vue.js路由后失效的问题
Mar 17 Javascript
ES6 系列之 WeakMap的使用示例
Aug 06 Javascript
JS利用prototype给类添加方法操作详解
Jun 21 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
Sep 04 Javascript
jquery将json转为数据字典的实例代码
Oct 11 jQuery
解决echarts数据二次渲染不成功的问题
Jul 20 Javascript
JS实现两表格里数据来回转移的方法
May 28 #Javascript
原生JS和JQuery动态添加、删除表格行的方法
May 28 #Javascript
jQuery实现html表格动态添加新行的方法
May 28 #Javascript
jquery实现用户打分评分特效
May 28 #Javascript
用Node.js通过sitemap.xml批量抓取美女图片
May 28 #Javascript
javascript转换静态图片,增加粒子动画效果
May 28 #Javascript
jQuery实现限制textarea文本框输入字符数量的方法
May 28 #Javascript
You might like
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
php 数组的指针操作实现代码
2011/02/08 PHP
如何使用php输出时间格式
2013/08/31 PHP
php日历制作代码分享
2014/01/20 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
拖拉表格的JS函数
2008/11/20 Javascript
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
mpvue实现左侧导航与右侧内容的联动
2019/10/21 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
python简单实现获取当前时间
2016/08/27 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
什么是.net
2015/08/03 面试题
别名指示符是什么
2012/10/08 面试题
股东合作协议书范本
2014/04/14 职场文书
2014年秋季开学演讲稿
2014/05/24 职场文书
小学教师师德师风个人整改措施
2014/09/18 职场文书
工商局调档介绍信
2015/10/22 职场文书