jquery 发送短信验证码 倒计时功能(页面关闭也照常进行倒计时)

今天测试提了一个bug,发送短信倒计时功能,要求关闭页面也要进行倒计时。这想到了,当年我参与的周杰伦演唱会的先付先抢功能。与之类似,只不过,那个项目的时间都是服务器时间,本人目前有点偷懒,就用客户端的时间了。

一下是完整的代码,只不过在客户端的效率不是很好。

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
  <script src="http://cdn.bootcss.com/jquery/3.1.0/jquery.js"></script>
  <script src="http://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
  
  <!--<script src="jquery.min.js"></script>-->
 <!-- <script src="jquery.cookie.js"></script>-->
 <!-- <script src="//cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>-->
 </head>
 <body>
 <input id="memberTel" type="text" value="18518181818"/>
  <input id="code_btn" type="button"  value="免费获取验证码"  />
 </body>

 <script>

$(function(){
    checkCountdown();
    $("#code_btn").click(function (){
        if(count_down > 0){
            return;
        }
        sendCode($("#code_btn"));
    });

})
//校验打开页面的时候是否要继续倒计时
function checkCountdown(){
    var secondsremained =     $.cookie("secondsremained");
    if(secondsremained){
        var date = new Date(unescape(secondsremained));
        setCoutDown(date,$("#code_btn"));
    }
}
//发送验证码
function sendCode(obj){
    var result = isPhoneNum();
    if(result){
        //加载ajax 获取验证码的方法
        getCaptcha();
        var date = new Date();
        addCookie("secondsremained",date.toGMTString(),60);//添加cookie记录,有效时间60s
        setCoutDown(date,obj);
    }
}



var nowDate = null;
var time_difference = 0;
var count_down = 0;
function setCoutDown(date,obj) {
    nowDate = new Date();
    time_difference = ((nowDate- date)/1000).toFixed(0);
    count_down = 60 - time_difference;
    console.log(count_down);

    if(count_down<=0){
        obj.removeAttr("disabled");
        obj.removeClass("code_grey");
        obj.html("获取验证码");
        obj.val("获取验证码");
        addCookie("secondsremained","",60);//添加cookie记录,有效时间60s
        return;
    }
    obj.attr("disabled", true);
    obj.addClass("code_grey");
    obj.html(count_down + "秒后重发");
    obj.val(count_down + "秒后重发");
    setTimeout(function() { setCoutDown(date,obj) },1000) //每1000毫秒执行一次
}


//发送验证码时添加cookie
function addCookie(name,value,expiresHours){
    //判断是否设置过期时间,0代表关闭浏览器时失效
    if(expiresHours>0){
        var date=new Date();
        date.setTime(date.getTime()+expiresHours*1000);
        $.cookie(name, escape(value), {expires: date});
    }else{
        $.cookie(name, escape(value));

    }
}


//校验手机号是否合法
function isPhoneNum(){
    var mobile = $("#memberTel").val();
    if($.trim(mobile) =="" || !(/^1[3|4|5|7|8]\d{9}$/.test(mobile))){
        tooltip().show('提示','请输入正确手机号码');
        return false;
    }
    return true;
}

function getCaptcha(){

    $.ajax({
        type: 'GET',
        url: basePath + '/getcaptcha',
        data: {
            "mobile":mobile
        },
        async: false,
        dataType: "json",
    });
}


 </script>
</html>

转载于:https://my.oschina.net/u/2325281/blog/741283

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的示例代码,可以使用jQuery发送验证码倒计时60秒: HTML: ```html <input type="text" id="phone" placeholder="请输入手机号码"/> <button id="send-code">获取验证码</button> ``` JavaScript: ```javascript $(document).ready(function() { var count = 60; //倒计时初始值 var countdownTimer; //倒计时定时器 // 点击“获取验证码”按钮 $("#send-code").click(function() { var phone = $("#phone").val(); if (phone == "") { alert("请输入手机号码"); return; } // 发送验证码的逻辑 $.ajax({ url: "send_code.php", type: "POST", data: { phone: phone }, success: function(response) { if (response == "success") { // 发送成功,开始倒计时 startCountdown(); } else { alert("发送失败,请稍后重试"); } }, error: function() { alert("发送失败,请稍后重试"); } }); }); // 开始倒计时 function startCountdown() { count = 60; $("#send-code").prop("disabled", true); countdownTimer = setInterval(function() { count--; if (count <= 0) { clearInterval(countdownTimer); $("#send-code").prop("disabled", false).html("获取验证码"); } else { $("#send-code").html("重新发送(" + count + ")"); } }, 1000); } }); ``` 这段代码将会在用户点击“获取验证码”按钮之后,发送一个 AJAX 请求到 `send_code.php` 页面,然后开始倒计时60秒。在倒计时期间,按钮会显示当前倒计时的秒数,直到倒计时结束。如果用户在倒计时期间再次点击“获取验证码”按钮,该按钮将会被禁用,直到倒计时结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值