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 相关文章推荐
JavaScript 监听textarea中按键事件
Oct 08 Javascript
js获取浏览器的可视区域尺寸的实现代码
Nov 30 Javascript
javascript 判断中文字符长度的函数代码
Aug 27 Javascript
jquery设置按钮停顿3秒不可用
Mar 07 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
Dec 16 Javascript
jQuery中prev()方法用法实例
Jan 08 Javascript
浅析AngularJS中的生命周期和延迟处理
Jun 18 Javascript
JS实现支持Ajax验证的表单插件
Mar 24 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
Sep 08 Javascript
简单谈谈Javascript函数中的arguments
Feb 09 Javascript
jQuery分组选择器简单用法示例
Apr 04 jQuery
关于vue表单提交防双/多击的例子
Oct 31 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
php+redis实现商城秒杀功能
2020/11/19 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
js处理表格对table进行修饰
2014/05/26 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python读取mysql数据绘制条形图
2020/03/25 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
写好自荐信的要点
2013/11/06 职场文书
幼儿园安全责任书
2014/04/14 职场文书
补充协议书范本
2014/04/23 职场文书
安全目标管理责任书
2014/07/25 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
终止劳动合同通知书
2015/04/16 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
Spring 使用注解开发
2022/05/20 Java/Android