在前端开发过程中,登录/注册为常见的功能,现在一般以获取短信验证码来验证注册或登录时的手机号是否正确,为了防止用户频繁点击,就需要有倒计时的功能来限制用户点击事件,为此写下开发心得,如有错误还请大家指教!
HTML代码
<div class="item">
<div class="name">+86</div>
<div class="value">
<input type="number" name="tel" id="tel" placeholder="请输入手机号" />
</div>
</div>
<div class="item">
<div class="value btn">
<input type="number" name="code" id="code" placeholder="请输入验证码" />
</div>
<div class="name btn">获取验证码</div>
</div>
js代码
//获取验证码按钮点击事件
$('.item .name.btn').click(function() {
if($(this).hasClass('disable')) {//判断是否可以点击(正在倒计时不可点击)
//正在倒计时不可点击
return false;
} else {
//倒计时结束可以点击
var tel = $('#tel').val();
if(!tel) {
myalert('请输入手机号');
} else if(!telreg.test(tel)) {
myalert('您输入的手机号有误');
} else {
//获取短信验证码
$.ajax({
url: IP + 'sms',
type: 'POST',
beforeSend: function(request) {
request.setRequestHeader("API-Token", "0");
request.setRequestHeader("API-Common", "{'ss':'ss'}");
},
data: {
'username': tel
},
success: function(e) {
console.log(e);
if(e.isOk && e.status == '200') {
//获取验证码成功,按钮不可点击,且进行倒计时
$('.name.btn').addClass('disable');
var timer = 30;//倒计时为30秒
var time = setInterval(function() {
--timer;
$('.name.btn').html(timer + 's后重新获取');
$('.name.btn').addClass('noclick');
if(timer == 0) {
clearInterval(time);
$('.name.btn').html('获取验证码');
$('.name.btn').removeClass('noclick');
$('.name.btn').removeClass('disable');
}
}, 1000);
myalert('验证码发送成功');
} else {
myalert(e.message);
}
},
error: function() {
myalert('请求失败');
}
})
}
}
});