jQuery实现发送验证码30s倒计时,且刷新页面时有效

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

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

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

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

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

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

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

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

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

②获取当前 cookie 值

function getCookie(){
            // 获取全部的 cookie
            var cookie = $(document)[0].cookie;
            // 获取 cookie 项  (数组)
            var citem = cookie.split(‘;‘);
            // 过滤数组  获得 键为 ckey 的项
            var ckey = citem.filter(function(item){
                return item.split(‘=‘)[0].trim()==‘ckey‘;
            });
            // 获得 时间  cval
            cval = ckey[0].split(‘=‘)[1];
            return cval;
        }

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

function setStyle(){
            var cval = getCookie();
            if(cval>1){
                $(‘#btn‘).text(‘倒计时‘+cval+‘s‘);
                $(‘#btn‘).prop(‘disabled‘,true);
               console.log(‘hahah‘)
            }else{
                $(‘#btn‘).text(‘获取验证码‘);
                $(‘#btn‘).prop(‘disabled‘,false);
            }
       }
       setStyle();

④定时器实现倒计时

setInterval(function(){
            setCookie();
            console.log(1);
        },1000)

function setCookie(){
    var cval = getCookie();
        if(cval>1){
               $(document)[0].cookie = ‘ckey=‘+(cval-1);
               $(‘#btn‘).text(‘倒计时‘+(cval-1)+‘s‘);
               $(‘#btn‘).prop(‘disabled‘,true);
         }else if(cval==1){
                $(‘#btn‘).text(‘获取验证码‘);
                $(‘#btn‘).prop(‘disabled‘,false);
                $(document)[0].cookie = ‘ckey=‘+0;
         }
}

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
    <input type="text">
    <button id="btn">获取</button>
    <script>
        $(‘#btn‘).click(function(){
            $(‘#btn‘).text(‘倒计时30s‘);
            $(‘#btn‘).prop(‘disabled‘,true);
            // 设置 cookie 值
            $(document)[0].cookie = ‘ckey=‘+30;
            console.log(‘cookie 设置完毕‘);

       });
       function setStyle(){
            var cval = getCookie();
            if(cval>1){
                $(‘#btn‘).text(‘倒计时‘+cval+‘s‘);
                $(‘#btn‘).prop(‘disabled‘,true);
               console.log(‘hahah‘)
            }else{
                $(‘#btn‘).text(‘获取验证码‘);
                $(‘#btn‘).prop(‘disabled‘,false);
            }
       }
       setStyle();

       id = setInterval(function(){
            setCookie();
            console.log(1);
        },1000)

        function setCookie(){
            var cval = getCookie();
            if(cval>1){
                $(document)[0].cookie = ‘ckey=‘+(cval-1);
                $(‘#btn‘).text(‘倒计时‘+(cval-1)+‘s‘);
                $(‘#btn‘).prop(‘disabled‘,true);
            }else if(cval==1){
                $(‘#btn‘).text(‘获取验证码‘);
                $(‘#btn‘).prop(‘disabled‘,false);
                $(document)[0].cookie = ‘ckey=‘+0;
                // clearInterval(id);
            }
        }
        function getCookie(){
            // 获取全部的 cookie
            var cookie = $(document)[0].cookie;
            // 获取 cookie 项  (数组)
            var citem = cookie.split(‘;‘);
            // 过滤数组  获得 键为 ckey 的项
            var ckey = citem.filter(function(item){
                return item.split(‘=‘)[0].trim()==‘ckey‘;
            });
            // 获得 时间  cval
            cval = ckey[0].split(‘=‘)[1];
            return cval;
        }
    </script>
</body>
</html>

原文地址:https://www.cnblogs.com/zjl-712/p/11407335.html

时间: 2024-08-25 08:43:00

jQuery实现发送验证码30s倒计时,且刷新页面时有效的相关文章

jquery实现手机发送验证码的倒计时代码(转)

var wait = 60;//时间 function time(o, p) {//o为按钮的对象,p为可选,这里是60秒过后,提示文字的改变 if (wait == 0) { //o.removeAttr("disabled"); //o.val("点击发送验证码");//改变按钮中value的值 //p.html("如果您在1分钟内没有收到验证码,请检查您填写的手机号码是否正确或重新发送"); $('#'+p).removeAttr(&quo

刷新页面时 select值保持不变

刷新页面时,要使下拉菜单(select).raido保持不变,用ajax是无法实现的.我想只能通过cookies才能实现.刷新前先把select或radio的值保存在cookies中,刷新后再填回去.下面是测试代码: [html] view plain <select name="sex" id="sex" onchange="save()"> <option  value="01" selected >

jQuery手机发送验证码倒计时代码

<!DOCTYPE> <html> <head> <meta charset="UTF-8"> <script type="text/javascript" src="http://s29.xtest.tech/res/bxdapp/js/jquery.min.js"></script> <script type="text/javascript"&

解决让刷新页面时不提示 &quot;重试或取消”对话框

如果刷新一个已经提交过的页面时,系统总是会提示一个 "重试或取消”的对话框.,如果是一个普通的页面,好象也无所谓,有就有,大不了多点一下.但是当我们是在子窗体中刷新父窗体时,就显得有点多余了.所以就想把这个对话框给去了.找了很的办法.总结一下. 一, window.opener.location.reload() 如果改页面没提交过,这个方法好使.但是这个页面一旦提交过后,系统就会提示"重试或取消”的对话框. 二 window.opener.location = window.open

刷新页面时出现提示

<script type="text/javascript"> var unloadPageTip = function(){return "刷新页面有可能会丢失数据";}; window.onbeforeunload = unloadPageTip; </script>

Android发送验证码的倒计时按钮

1 直接上图 2 原理 原理很简单,就是把相应的倒计时逻辑等封装到一个控件中,并向外部提供接口. 3 代码 import java.util.Timer; import java.util.TimerTask; import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.Layo

vue组件中倒计时,刷新页面不会从头开始

开启倒计时,直接保存到vuex中,且存储到本地持久化 // state.js const runTime = localStorage.getItem('time'); paymentRunTime:runTime // mutations.js TimeReduction(state) { this.timerId = setInterval(() => { if (state.paymentRunTime === 0) { state.paymentRunTime = 60; return

编写一个实现页面计数,要求当刷新页面时,不增加计数

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

ScrollView 嵌套 ListView 时,刷新页面时,会出现 自动 滚动至listview 的区域 解决方案:

在页面切换  的时候,可能会出现  因listview 数据加载 而 导致  该页面展示的位置为 该listview区域. 解决方案:可在ScrollView中添加 android:descendantFocusability="blocksDescendants" 概述: android:descendantFocusability Defines the relationship between the ViewGroup and its descendants when look