javascript - 清除超时无法正常工作

标签 javascript jquery html ajax

    //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/

相关文章:

javascript - React 应用程序和用户角色

javascript - Intel XDK 在两个页面之间共享数据

javascript - 客户端 JavaScript/jQuery 表单验证没有用吗?

html - 使用 Twitter 的新小部件时如何禁用消息 “Are you sure you want to send a form again”?

javascript - 使用 css 调整 div 中对 Angular 线的大小

Javascript 与 MySQL 数据库交互

javascript - jquery/javascript 隐藏和显示元素依赖下拉列表

javascript - jQuery根据页面滚动添加/删除类

javascript - 魔术线宽度错误

javascript - 复制期间文本区域格式丢失