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 键盘记录实现(兼容FireFox和IE)
Feb 07 Javascript
Javascript alert消息换行的方法
Aug 07 Javascript
js单例模式的两种方案
Oct 22 Javascript
浅析hasOwnProperty方法的应用
Nov 20 Javascript
AngularJS路由切换实现方法分析
Mar 17 Javascript
用jQuery实现圆点图片轮播效果
Mar 19 Javascript
Node.js使用Koa搭建 基础项目
Jan 08 Javascript
vue.js 使用axios实现下载功能的示例
Mar 05 Javascript
说说node中的可读流和可写流的区别
Jun 01 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
Aug 06 Javascript
vue-cli4使用全局less文件中的变量配置操作
Oct 21 Javascript
Ajax实现局部刷新的方法实例
Mar 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中的正规表达式(二)
2006/10/09 PHP
php 分页类 扩展代码
2009/06/11 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
Raphael带文本标签可拖动的图形实现代码
2013/02/20 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
javascript使用canvas实现饼状图效果
2020/09/08 Javascript
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
Python代码需要缩进吗
2020/07/01 Python
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
大学生素质拓展活动方案
2014/02/11 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
个人职业及收入证明
2014/10/13 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书