经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » jQuery » 查看文章
jQuery实现发送验证码30s倒计时,且刷新页面时有效
来源:cnblogs  作者:zjl_712  时间:2019/8/26 8:43:41  对本文有异议

在这里讲一讲这个案例的实现思路吧(个人见解)。。核心思想:为防止页面刷新时倒计时失效的解决方案是:当每次刷新一次页面时都执行一个函数 即下面讲到的 setStyle() 函数。这个函数会根据当前的 cookie 值判断 是否处于倒计时阶段 ,因为 cookie 值不会随着 网页的刷新而改变。

最后面已附上全部代码可直接复制下来借鉴一下。

1、本案例用到了 jQuery,第一步:页面引入 jQuery。

  1. <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>

2、第二步:HTML 部分,为演示方便 只需一个按钮即可。

  1. <button id="btn">获取</button>

3、第三步:js 代码部分。该部分 是采用操作 cookie 来实现 刷新页面 倒计时不失效

①点击按钮设置 cookie 、显示倒计时时间以及禁用按钮

  1. $('#btn').click(function(){
  2. $('#btn').text('倒计时30s');  // 倒计时
  3. $('#btn').prop('disabled',true);  //禁用按钮
  4. $(document)[0].cookie = 'ckey='+30;  // 设置 cokie
  5. });

②获取当前 cookie 值

  1. function getCookie(){
  2. // 获取全部的 cookie
  3. var cookie = $(document)[0].cookie;
  4. // 获取 cookie 项 (数组)
  5. var citem = cookie.split(';');
  6. // 过滤数组 获得 键为 ckey 的项
  7. var ckey = citem.filter(function(item){
  8. return item.split('=')[0].trim()=='ckey';
  9. });
  10. // 获得 时间 cval
  11. cval = ckey[0].split('=')[1];
  12. return cval;
  13. }

③防止页面刷新时倒计时失效。解决方案是 每刷新一次页面都要获取当前的 cookie 值 ,如果值不为零的话一直是禁用状态

  1. function setStyle(){
  2. var cval = getCookie();
  3. if(cval>1){
  4. $('#btn').text('倒计时'+cval+'s');
  5. $('#btn').prop('disabled',true);
  6. console.log('hahah')
  7. }else{
  8. $('#btn').text('获取验证码');
  9. $('#btn').prop('disabled',false);
  10. }
  11. }
  12. setStyle();

④定时器实现倒计时

  1. setInterval(function(){
  2. setCookie();
  3. console.log(1);
  4. },1000)
  5. function setCookie(){
  6. var cval = getCookie();
  7. if(cval>1){
  8. $(document)[0].cookie = 'ckey='+(cval-1);
  9. $('#btn').text('倒计时'+(cval-1)+'s');
  10. $('#btn').prop('disabled',true);
  11. }else if(cval==1){
  12. $('#btn').text('获取验证码');
  13. $('#btn').prop('disabled',false);
  14. $(document)[0].cookie = 'ckey='+0;
  15. }
  16. }

4、完整代码 直接复制 即可使用

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
  9. </head>
  10. <body>
  11. <input type="text">
  12. <button id="btn">获取</button>
  13. <script>
  14. $('#btn').click(function(){
  15. $('#btn').text('倒计时30s');
  16. $('#btn').prop('disabled',true);
  17. // 设置 cookie 值
  18. $(document)[0].cookie = 'ckey='+30;
  19. console.log('cookie 设置完毕');
  20. });
  21. function setStyle(){
  22. var cval = getCookie();
  23. if(cval>1){
  24. $('#btn').text('倒计时'+cval+'s');
  25. $('#btn').prop('disabled',true);
  26. console.log('hahah')
  27. }else{
  28. $('#btn').text('获取验证码');
  29. $('#btn').prop('disabled',false);
  30. }
  31. }
  32. setStyle();
  33. id = setInterval(function(){
  34. setCookie();
  35. console.log(1);
  36. },1000)
  37. function setCookie(){
  38. var cval = getCookie();
  39. if(cval>1){
  40. $(document)[0].cookie = 'ckey='+(cval-1);
  41. $('#btn').text('倒计时'+(cval-1)+'s');
  42. $('#btn').prop('disabled',true);
  43. }else if(cval==1){
  44. $('#btn').text('获取验证码');
  45. $('#btn').prop('disabled',false);
  46. $(document)[0].cookie = 'ckey='+0;
  47. // clearInterval(id);
  48. }
  49. }
  50. function getCookie(){
  51. // 获取全部的 cookie
  52. var cookie = $(document)[0].cookie;
  53. // 获取 cookie 项 (数组)
  54. var citem = cookie.split(';');
  55. // 过滤数组 获得 键为 ckey 的项
  56. var ckey = citem.filter(function(item){
  57. return item.split('=')[0].trim()=='ckey';
  58. });
  59. // 获得 时间 cval
  60. cval = ckey[0].split('=')[1];
  61. return cval;
  62. }
  63. </script>
  64. </body>
  65. </html>

 

原文链接:http://www.cnblogs.com/zjl-712/p/11407335.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号