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. I.MX6 wpa_cli 使用

    /*********************************************************************** * I.MX6 wpa_cli 使用 * 说明: * ...

  2. CodeForces-652D:Nested Segments(树状数组+离散化)

    You are given n segments on a line. There are no ends of some segments that coincide. For each segme ...

  3. AutoIT: 如何通过坐标相对位置来对无法识别的Menu以及GridView进行定位点击操作

    一般情况下,GridView中的数据来自数据库,我们通过Windows Info,是无法获取GridView中的信息的.而软件定制的Menu,很多时候无法通过系统提供的WinMenuSelectIte ...

  4. 简单记录CentOS服务器配置JDK+Tomcat+MySQL

    项目需要部署到一台CentOS的服务器之上,之前这台服务器上面已经安装了一个Nginx和MySQL,跑的是PHP环境,有一个项目正在运行.而我们最新的项目是用Java写的,服务器是用的Tomcat,所 ...

  5. 2-4 测试案例helloWorld

  6. E20170519-ts

    numeric adj. 数字的; 数值的; nibble   vt. 啃,一点一点地咬(吃); rational adj. 理性的; 合理的; n. 合理的事物; [数] 有理数; numerato ...

  7. bzoj1048(记忆化搜索)

    1048: [HAOI2007]分割矩阵 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1218  Solved: 890[Submit][Statu ...

  8. Springboot整合elasticsearch以及接口开发

    Springboot整合elasticsearch以及接口开发 搭建elasticsearch集群 搭建过程略(我这里用的是elasticsearch5.5.2版本) 写入测试数据 新建索引book( ...

  9. 笔记——malloc、free、不同数据类型操作、.pyc文件、python安装第三方包、验证一个网站的所有链接有效性

    C — malloc( ) and free( ) C 语言中使用malloc( )函数申请的内存空间,为什么一定要使用free释放? **malloc()函数功能:是从堆区申请一段连续的空间,函数结 ...

  10. BZOJ2006 超级钢琴

    Description ​ 给定一个长度为n的区间,询问前k大的区间和,区间长度\(\in [L, R]\). $ n, k <= 500000$ Solution ​ 首先求前缀和.把一个区间 ...