html
<div class="pwdContent">
<div class="pwdBox"></div>
<div class="pwdErrorPoint">请输入数字!</div> </div> js
// 短信验证码
/*动态生成*/
var pwdBox = document.getElementsByClassName("pwdBox")[0]; function createDIV1(num) {
for (var i = 0; i < num; i++) {
var pawDiv = document.createElement("div");
pawDiv.className = "pawDivVali";
pwdBox.appendChild(pawDiv);
var paw = document.createElement("input");
paw.type = "password";
paw.className = "pawVali";
paw.maxLength = "1";
paw.readOnly = "readonly";
pawDiv.appendChild(paw);
}
} createDIV1(6); var pawDivVali = document.getElementsByClassName("pawDivVali");
var pawVali = document.getElementsByClassName("pawVali");
var pawDivCountVali = pawDivVali.length;
/*设置第一个输入框默认选中*/
// pawDiv[0].setAttribute("style","border: 2px solid deepskyblue;");
pawVali[0].readOnly = false;
pawVali[0].focus(); var pwdErrorPoint = document.getElementsByClassName("pwdErrorPoint")[0]; /*绑定pawDiv点击事件*/ function func1() {
for (var i = 0; i < pawDivCountVali; i++) {
pawDivVali[i].addEventListener("click", function () {
pawDivClick1(this);
});
pawVali[i].onkeyup = function (event) {
console.log(event.keyCode);
if (event.keyCode >= 48 && event.keyCode <= 57) {
/*输入0-9*/
changeDiv1();
pwdErrorPoint.style.display = "none"; } else if (event.keyCode == "8") {
/*退格回删事件*/
firstDiv1(); } else if (event.keyCode == "13") {
/*回车事件*/
getPassword1(); } else {
/*输入非0-9*/
pwdErrorPoint.style.display = "block";
this.value = "";
} };
} } func1(); /*定义pawDiv点击事件*/
var pawDivClick1 = function (e) {
for (var i = 0; i < pawDivCountVali; i++) {
// pawDivVali[i].setAttribute("style","border:none");
}
}; /*定义自动选中下一个输入框事件*/
var changeDiv1 = function () {
for (var i = 0; i < pawDivCountVali; i++) {
if (pawVali[i].value.length == "1") {
/*处理当前输入框*/
pawVali[i].blur();
/*处理上一个输入框*/
// 添加背景点
// paw[i].setAttribute("style","background: red;");
if (i == 5) {
alert("验证码输入是否正确")
getPassword1();
return
}
pawVali[i + 1].focus();
pawVali[i + 1].readOnly = false;
pawDivClick(pawVali[i + 1]);
}
}
}; /*回删时选中上一个输入框事件*/
var firstDiv1 = function () {
for (var i = 0; i < pawDivCountVali; i++) {
console.log(i);
if (pawVali[i].value.length == "0") {
/*处理当前输入框*/
console.log(i);
pawVali[i].blur();
/*处理上一个输入框*/
pawVali[i - 1].focus();
pawVali[i - 1].readOnly = false;
pawVali[i - 1].value = "";
pawDivClick(pawVali[i - 1]);
break;
}
}
}; /*验证码输入错误直接回到第一个输入框事件*/
var firstDiv2 = function () {
for (var i = 0; i < pawDivCountVali; i++) {
console.log(i);
pawVali[i].value = ""
/*处理当前输入框*/
console.log(i);
pawVali[i].blur(); /*处理上一个输入框*/
pawDivClick(pawVali[i]); }
pawVali[0].focus();
pawVali[0].readOnly = false;
}; /*获取输入密码*/
var getPassword1 = function () {
var n = "";
for (var i = 0; i < pawDivCountVali; i++) {
n += pawVali[i].value;
}
// 如果密码输入成功
$(".pay-ui-btn").removeClass("disable")
alert(n);
$("#pursePayForm input[name='validateCode']").val(n)
alert("验证码输入错误")
$(".errorPointVali").css({display: 'block'})
setTimeout(function () {
$(".errorPointVali").css({display: 'none'})
}, 2000)
firstDiv2()
};
// var getPasswordBtn=document.getElementsByClassName("getPasswordBtn")[0];
//
// getPasswordBtn.addEventListener("click",getPassword); /*键盘事件*/
document.onkeyup = function (event) {
if (event.keyCode == "13") {
/*回车事件*/
getPassword();
}
}; css
.pwdBox {
width: 228px;
height: 37px;
border: 1px solid #ccc;
margin-top: 10px;
line-height: 30px;
} #validateBox {
position: relative;
} .jp-logo-wrap {
position: absolute;
} .jp-logo-wrap .jp-logo {
background-position: -51px -41px;
width: 102px;
height: 35px;
position: absolute;
left: -34px;
top: 5px;
background: url('http://test.storage.jd.com/et-trade/pdf/receipt/20181019/cashier_two.jpg?Expires=1575941007&AccessKey=jZAZj2evo1DsyCu7&Signature=XWPKewwj1oNwdEKedpQOFzTOAwM%3D') no-repeat;
} .index-cont-top span {
background-position: -51px -77px;
background: url('http://test.storage.jd.com/et-trade/pdf/receipt/20181019/cashier_two.jpg?Expires=1575941007&AccessKey=jZAZj2evo1DsyCu7&Signature=XWPKewwj1oNwdEKedpQOFzTOAwM%3D') no-repeat;
border-bottom: 1px solid #eee;
}

// 短信验证码倒计时

html  
<div class="validSend">
<input type="button" id="btn" value="免费获取验证码" onclick="settime(this)"/>
</div>
js

var countdown = 60;

function settime(obj) {
sedSms();
if (countdown == 0) {
obj.removeAttribute("disabled");
obj.value = "免费获取验证码";
countdown = 60;
return;
} else {
obj.setAttribute("disabled", true);
obj.value = "重新发送(" + countdown + ")";
countdown--;
}
setTimeout(function () {
settime(obj)
}
, 1000)
}

js模拟支付宝发送短信验证码&&&&短信倒计时的更多相关文章

  1. js实现发送短信验证码后的倒计时功能(无视页面刷新)

    [1].[代码] 这是页面上的发送验证码按钮 跳至 [1] [2] [3]<input id="second" type="button" value=& ...

  2. 基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. js模拟支付宝提交表单

    弄过支付宝的程序猿可能都知道,里面有非常多地方都用到了自提交表单的方式,支付宝的接口通过请求API的形式取得server返回的表单字符串,使用out.print("表单字符串")在 ...

  4. spring boot:用redis+lua限制短信验证码的发送频率(spring boot 2.3.2)

    一,为什么要限制短信验证码的发送频率? 1,短信验证码每条短信都有成本制约, 肯定不能被刷接口的乱发 而且接口被刷会影响到用户的体验, 影响服务端的正常访问, 所以既使有图形验证码等的保护, 我们仍然 ...

  5. Django商城项目笔记No.5用户部分-注册接口-短信验证码

    Django商城项目笔记No.4用户部分-注册接口-短信验证码 短信验证码也保存在redis里(sms_code_15101234567) 在views中新增SMSCodeView类视图,并且写出步骤 ...

  6. Android学习笔记之短信验证码的获取和读取

    PS:最近很多事情都拖拖拉拉的..都什么办事效率啊!!! 还得吐槽一下移动运营商,验证码超过五次的时候,直接把我的手机号封闭.真是受够了. 学习笔记: 1.Android之如何获取短信验证码. 2.如 ...

  7. Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结

    Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码  用户操作 ,比如 ...

  8. js 发送短信验证码倒计时

    html <input type="button" id="btn" value="免费获取验证码" onclick="se ...

  9. JS异步操作之promise发送短信验证码.html

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta cont ...

随机推荐

  1. 使用Django.core.cache操作Memcached导致性能不稳定的分析过程

    使用Django.core.cache操作Memcached导致性能不稳定的分析过程 最近测试一项目,用到了Nginx缓存服务,那可真是快啊!2Gb带宽都轻易耗尽. 不过Api接口无法简单使用Ngin ...

  2. 《Spring Boot官方指南》(二)入门

    如果您刚开始接触Spring Boot,或者简称’Spring’, 这个部分对您来说非常有用.这个部分提供了“是什么?”,“怎么做?”和 “为什么?”的解释.您除了会阅读一份附带Spring Boot ...

  3. Lightoj 1140(数位DP)

    求一个区间内的数含有多少个0. dp[len][pre]表示长度为len的数,含有pre个0. 需要加一个标记,来表示前缀是否为0(可以是一串连续的0),如果前缀一直为0,就一直搜,如果前缀不为0,就 ...

  4. Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline(转载)

    转自:http://www.cnblogs.com/JohnTsai/p/4074643.html 相信大家对LinearLayout已经相当熟悉,但你们是否了解它的属性baselineAligned ...

  5. bzoj 3307: 雨天的尾巴【树剖lca+树上差分+线段树合并】

    这居然是我第一次写线段树合并--所以我居然在合并的时候加点结果WAWAWAMLEMLEMLE--!ro的时候居然直接指到la就行-- 树上差分,每个点建一棵动态开点线段树,然后统计答案的时候合并即可 ...

  6. 【爬坑系列】之解读kubernetes的认证原理&实践

    对于访问kube-apiserver模块的请求来说,如果是使用http协议,则会顺利进入模块内部得到自己想要的:但是如果是用的是https,则能否进入模块内部获得想要的资源,他会首先要进行https自 ...

  7. [luogu4931]情侣?给我烧了!

    题解 有\(i\)对情侣全都不和谐那里推不出来只好写了一个暴力容斥然后大力卡常卡过去了== 容斥太过暴力,还是说正解吧 可以考虑直接计算\(n\)对情侣有\(k\)对和谐的方案数 设\(g[i]\)表 ...

  8. [SDOI2013]spring

    Description Input Output Sample Input 3 3 1 2 3 4 5 6 1 2 3 0 0 0 0 0 0 4 5 6 Sample Output 2 HINT 容 ...

  9. 题解报告:hdu1205吃糖果(插空法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1205 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果, ...

  10. spring入门笔记-(一)、spring boot HelloWorld

    什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...