首页 > 语言 > JavaScript > 正文

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

2024-05-06 16:20:59
字体:
来源:转载
供稿:网友

本文解决方案的基本思路是点击就将按钮设为disabled,然后根据cookie判断是否设置过期时间,将手机利用ajax提交到后台的发短信接口,就可以了

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

特别说明:

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

html代码

 

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

js对cookie的操作

 

 
  1. //发送验证码时添加cookie 
  2. function addCookie(name,value,expiresHours){  
  3. var cookieString=name+"="+escape(value);  
  4. //判断是否设置过期时间,0代表关闭浏览器时失效 
  5. if(expiresHours>0){  
  6. var date=new Date();  
  7. date.setTime(date.getTime()+expiresHours*1000);  
  8. cookieString=cookieString+";expires=" + date.toUTCString();  
  9. }  
  10. document.cookie=cookieString;  
  11. }  
  12. //修改cookie的值 
  13. function editCookie(name,value,expiresHours){  
  14. var cookieString=name+"="+escape(value);  
  15. if(expiresHours>0){  
  16. var date=new Date();  
  17. date.setTime(date.getTime()+expiresHours*1000); //单位是毫秒 
  18. cookieString=cookieString+";expires=" + date.toGMTString();  
  19. }  
  20. document.cookie=cookieString;  
  21. }  
  22. //根据名字获取cookie的值 
  23. function getCookieValue(name){  
  24. var strCookie=document.cookie;  
  25. var arrCookie=strCookie.split("; ");  
  26. for(var i=0;i<arrCookie.length;i++){  
  27. var arr=arrCookie[i].split("=");  
  28. if(arr[0]==name){ 
  29. return unescape(arr[1]); 
  30. break
  31. }else
  32. return "";  
  33. break
  34. }  
  35. }  
  36.  

主要逻辑代码

 

 
  1. $(function(){ 
  2. $("#second").click(function (){ 
  3. sendCode($("#second")); 
  4. }); 
  5. v = getCookieValue("secondsremained");//获取cookie值 
  6. if(v>0){ 
  7. settime($("#second"));//开始倒计时 
  8. }) 
  9. //发送验证码 
  10. function sendCode(obj){ 
  11. var phonenum = $("#phonenum").val(); 
  12. var result = isPhoneNum(); 
  13. if(result){ 
  14. doPostBack('${base}/login/getCode.htm',backFunc1,{"phonenum":phonenum}); 
  15. addCookie("secondsremained",60,60);//添加cookie记录,有效时间60s 
  16. settime(obj);//开始倒计时 
  17. //将手机利用ajax提交到后台的发短信接口 
  18. function doPostBack(url,backFunc,queryParam) { 
  19. $.ajax({ 
  20. async : false
  21. cache : false
  22. type : 'POST'
  23. url : url,// 请求的action路径 
  24. data:queryParam, 
  25. error : function() {// 请求失败处理函数 
  26. }, 
  27. success : backFunc 
  28. }); 
  29. function backFunc1(data){ 
  30. var d = $.parseJSON(data); 
  31. if(!d.success){ 
  32. alert(d.msg); 
  33. }else{//返回验证码 
  34. alert("模拟验证码:"+d.msg); 
  35. $("#code").val(d.msg); 
  36. //开始倒计时 
  37. var countdown; 
  38. function settime(obj) {  
  39. countdown=getCookieValue("secondsremained"); 
  40. if (countdown == 0) {  
  41. obj.removeAttr("disabled");  
  42. obj.val("免费获取验证码");  
  43. return
  44. else {  
  45. obj.attr("disabled"true);  
  46. obj.val("重新发送(" + countdown + ")");  
  47. countdown--; 
  48. editCookie("secondsremained",countdown,countdown+1); 
  49. }  
  50. setTimeout(function() { settime(obj) },1000) //每1000毫秒执行一次 
  51. }  
  52. //校验手机号是否合法 
  53. function isPhoneNum(){ 
  54. var phonenum = $("#phonenum").val(); 
  55. var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+/d{8})$/;  
  56. if(!myreg.test(phonenum)){  
  57. alert('请输入有效的手机号码!');  
  58. return false;  
  59. }else
  60. return true

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选