//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会继续运行。因此,我决定在按下按钮时清除第一个超时(如果存在),但由于某种原因它不起作用。
我一直在看这个差不多一个小时,我似乎无法找到这个错误,谢谢你们帮助我!
你们所有人都很棒,谢谢你们这么快帮助我!
答案 0 :(得分:2)
在你的代码范围内,变量在post回调函数内结束,使这个变量全局可用,然后就可以了
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);
});
});
答案 1 :(得分:0)
范围问题。
将var errTime;
移到$.post
的初始调用之上,因此不会在每次调用时重新定义它。保持errTime = setTimeout(....)
不变,但没有var
。
答案 2 :(得分:0)
var errTime只是在超时函数范围内已知 要么在全局范围内定义errTime,要么在$(&#39; #registerCreateAccount&#39;)内定义(&#39;点击&#39;,函数(){
用于定义uid的功能等等......
另一种方法是使用窗口[&#39; errTime&#39;] = ....