//Create Account - Register Button
$('#registerCreateAccount').on('click', function() {
var uid = $('#registerUsername').val();
var email = $('#registerEmail').val();
var age = $('#registerAge').val();
var pwd = $('#registerPassword').val();
var confirmPwd = $('#registerConfirmPassword').val();
$.post('./php/register/createAccount.php', {uid: uid, email: email, age: age, pwd: pwd, confirmPwd: confirmPwd}, function(data) {
if (errTime) {
clearTimeout(errTime);
}
$('.errorMsg').html('<span class="w3-display-middle">' + data + '</span>');
var errTime = setTimeout(function() {
$('.errorMsg').html('');
}, 5000);
});
});
所以基本上我所做的就是将数据发送到 PHP 文件,如果有回调,它将是一条错误消息。所以我改变了.errMsg div的html,它以前是不可见的,因为它没有任何内容。因为我只希望错误消息出现 5 秒,所以我决定使用 setTimeout 在 5 秒后清除内容。
问题是,当人们连续多次点击注册按钮时,setTimeout 会继续下去。因此,我决定清除按下按钮时的第一次超时(如果存在),但由于某种原因它不起作用。
我已经看了将近一个小时了,但我似乎找不到错误,谢谢你们帮助我!
你们都太棒了,感谢你们这么快就帮助了我!
最佳答案
在您的代码范围中,变量在后回调函数内结束,使该变量全局可用,然后它将起作用
var errTime;
$('#registerCreateAccount').on('click', function() {
var uid = $('#registerUsername').val();
var email = $('#registerEmail').val();
var age = $('#registerAge').val();
var pwd = $('#registerPassword').val();
var confirmPwd = $('#registerConfirmPassword').val();
$.post('./php/register/createAccount.php', {uid: uid, email: email, age: age, pwd: pwd, confirmPwd: confirmPwd}, function(data) {
clearTimeout(errTime);
$('.errorMsg').html('<span class="w3-display-middle">' + data + '</span>');
errTime = setTimeout(function() {
$('.errorMsg').html('');
}, 5000);
});
});
关于javascript - 清除超时无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46041107/