js實(shí)現(xiàn)發(fā)送驗(yàn)證碼后的倒計(jì)時(shí)功能
之前分享過(guò)只用js實(shí)現(xiàn)倒計(jì)時(shí)的功能,后來(lái)測(cè)試時(shí)發(fā)現(xiàn),刷新或關(guān)閉網(wǎng)頁(yè)后,倒計(jì)時(shí)就不能用了.網(wǎng)上也沒(méi)找到合適的解決方案,所以自己就寫(xiě)了個(gè),這次的算是優(yōu)化版吧,能滿足刷新或重新打開(kāi)網(wǎng)頁(yè)后,倒計(jì)時(shí)依然能用
特別說(shuō)明:
cookie最初創(chuàng)建的有效時(shí)間是60秒.也就是說(shuō),你如果在倒計(jì)時(shí)為20的時(shí)候,關(guān)閉網(wǎng)頁(yè).20秒之后再打開(kāi),是不會(huì)有倒計(jì)時(shí)顯示的;但是,如果倒計(jì)時(shí)為20時(shí),關(guān)閉頁(yè)面,如果在20秒內(nèi)重新打開(kāi)頁(yè)面,是有倒計(jì)時(shí)顯示的.
html代碼
<input id="second" type="button" value="免費(fèi)獲取驗(yàn)證碼" />
js對(duì)cookie的操作
//發(fā)送驗(yàn)證碼時(shí)添加cookie
function addCookie(name,value,expiresHours){
var cookieString=name+"="+escape(value);
//判斷是否設(shè)置過(guò)期時(shí)間,0代表關(guān)閉瀏覽器時(shí)失效
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;
}
//根據(jù)名字獲取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"));//開(kāi)始倒計(jì)時(shí)
}
})
//發(fā)送驗(yàn)證碼
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記錄,有效時(shí)間60s
settime(obj);//開(kāi)始倒計(jì)時(shí)
}
}
//將手機(jī)利用ajax提交到后臺(tái)的發(fā)短信接口
function doPostBack(url,backFunc,queryParam) {
$.ajax({
async : false,
cache : false,
type : 'POST',
url : url,// 請(qǐng)求的action路徑
data:queryParam,
error : function() {// 請(qǐng)求失敗處理函數(shù)
},
success : backFunc
});
}
function backFunc1(data){
var d = $.parseJSON(data);
if(!d.success){
alert(d.msg);
}else{//返回驗(yàn)證碼
alert("模擬驗(yàn)證碼:"+d.msg);
$("#code").val(d.msg);
}
}
//開(kāi)始倒計(jì)時(shí)
var countdown;
function settime(obj) {
countdown=getCookieValue("secondsremained");
if (countdown == 0) {
obj.removeAttr("disabled");
obj.val("免費(fèi)獲取驗(yàn)證碼");
return;
} else {
obj.attr("disabled", true);
obj.val("重新發(fā)送(" + countdown + ")");
countdown--;
editCookie("secondsremained",countdown,countdown+1);
}
setTimeout(function() { settime(obj) },1000) //每1000毫秒執(zhí)行一次
}
//校驗(yàn)手機(jī)號(hào)是否合法
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('請(qǐng)輸入有效的手機(jī)號(hào)碼!');
return false;
}else{
return true;
}
}
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- JS實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)的注冊(cè)頁(yè)面
- JS實(shí)現(xiàn)用戶注冊(cè)時(shí)獲取短信驗(yàn)證碼和倒計(jì)時(shí)功能
- JS實(shí)現(xiàn)表單驗(yàn)證功能(驗(yàn)證手機(jī)號(hào)是否存在,驗(yàn)證碼倒計(jì)時(shí))
- 基于JS實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼后的倒計(jì)時(shí)功能(無(wú)視頁(yè)面刷新,頁(yè)面關(guān)閉不進(jìn)行倒計(jì)時(shí)功能)
- JS/jQ實(shí)現(xiàn)免費(fèi)獲取手機(jī)驗(yàn)證碼倒計(jì)時(shí)效果
- js實(shí)現(xiàn)點(diǎn)擊獲取驗(yàn)證碼倒計(jì)時(shí)效果
- JS 實(shí)現(xiàn)獲取驗(yàn)證碼 倒計(jì)時(shí)功能
相關(guān)文章
javascript window.onerror事件學(xué)習(xí)新收獲
javascript window.onerror事件學(xué)習(xí)新收獲...2007-11-11
實(shí)現(xiàn)網(wǎng)頁(yè)內(nèi)容水平或垂直滾動(dòng)的Javascript代碼
用Javascript實(shí)現(xiàn)新聞內(nèi)容的水平或垂直滾動(dòng),主要的優(yōu)點(diǎn)是我們可以實(shí)現(xiàn)自定義滾動(dòng)風(fēng)格或特效,應(yīng)用效果比起傳統(tǒng)的marquee更加具有特色,方法也比較簡(jiǎn)單2012-10-10
Bootstrap實(shí)現(xiàn)前端登錄頁(yè)面帶驗(yàn)證碼功能完整示例
這篇文章主要介紹了Bootstrap實(shí)現(xiàn)前端登錄頁(yè)面帶驗(yàn)證碼功能,結(jié)合完整實(shí)例形式分析了Bootstrap前端登錄頁(yè)面帶驗(yàn)證碼界面布局與功能實(shí)現(xiàn)相關(guān)操作技巧,需要的朋友可以參考下2020-03-03
更改BootStrap popover的默認(rèn)樣式及popover簡(jiǎn)單用法
這篇文章主要介紹了更改BootStrap popover的默認(rèn)樣式及popover簡(jiǎn)單用法,需要的朋友可以參考下2018-09-09
JavaScript實(shí)現(xiàn)的簡(jiǎn)單拖拽效果
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的簡(jiǎn)單拖拽效果,涉及javascript針對(duì)鼠標(biāo)事件與頁(yè)面樣式的操作技巧,需要的朋友可以參考下2015-06-06

