如果函数返回True,则显示Javascript按钮


Javascript Show Button If Functions Return True

我正在试着做一个注册表。我用三个函数检查6件事,如果所有的okey函数都返回true,否则为false。第一个功能检查用户名长度、用户名字符和用户名可用性。第二个功能检查电子邮件验证和电子邮件可用性。第三个函数检查通过匹配。功能运行良好,在此之前一切正常。但我想先隐藏按钮,然后如果所有函数都返回true,我想显示按钮。但是它不起作用。。我哪里错了?谢谢大家:)

$(document).ready(function() {
    $("#rname").attr('maxlength','15');
    $("#rmail").attr('maxlength','50');
    $("#rpass").attr('maxlength','50');

//--------------------------------------------------//  MaxLenght Settings
    $("#rname").keyup(function() {
        var uname = checkUsername();
    });     // Username keyup
//--------------------------------------------------//  Username Checking
    $("#rmail").keyup(function() {
        var umail = checkEmail();
    });     // Email keyup
//--------------------------------------------------//  Email Checking
    $("#passone, #passtwo").keyup(function() {
        var upass = checkPass();
    });     // Email keyup
//--------------------------------------------------//  Password Checking
    $("#rname, #rmail, #passone, #passtwo").keyup(function() {
        var btn = button(uname,umail,upass);
    });     // button show hide
//--------------------------------------------------//  Button
});     //--------------------------------------------------//  Document Ready Ends
function checkUsername() {
    var chars = /^[a-zA-Z0-9'.'_]*$/;
    var username = document.getElementById("rname").value;
    if(chars.test(username) == true) {
        $("#notName").html("").show();
        if ((username.length > 3) && (username.length < 20)) {
            $("#notName").html("").show();
                $.post("check.php", { username: username },
                function(result){
                    if (result == true) {
                        $("#notName").html("").show();
                        return true;
                    }
                    else {
                        $("#notName").html("Username is already exists!").show();
                        return false;
                    }
                });
        }
        else {
            $("#notName").html("Username must be between 3 and 20 characters!").show();
            return false;
        }
    }
    else {
        $("#notName").html("Username can contain just A-Z, 0-9, dot and underscore!").show();
        return false;
    }
}
//--------------------------------------------------//  checkUsername Function
function checkEmail() {
    var email = document.getElementById("rmail").value;
    $.post("check.php", { vmail: email },
    function(result){
        if (result == true){
            $.post("check.php", { email: email },
            function(result){
                if (result == true) {
                    $("#notMail").html("").show();
                    return true;
                }
                else {
                    $("#notMail").html("Email is already exists!").show();
                    return false;
                }

            });
        }
        else {
            $("#notMail").html("Please enter a valid Email").show();
            return false;
        }

    });

}
//--------------------------------------------------//  checkEmail Function
function checkPass() {
    var passOne = document.getElementById("passone").value;
    var passTwo = document.getElementById("passtwo").value;
    if (passOne == passTwo) {
        $("#notPass").html("").show();
        return true;
    }
    else {
        $("#notPass").html("Passwords do not match!").show();
        return false;
    }
}
//--------------------------------------------------//  checkPass Function
function button(a,b,c) {
    if (a == true && b == true && c == true) {
        document.getElementById("button").style.display = "block";
    }
    else {
        document.getElementById("button").style.display = "none";
    }
}

主要问题是您没有正确理解如何使用异步函数。您正在使用异步函数作为同步函数。这个问题对你有帮助。

使用PHP 的jQuery Ajax POST示例

然而,为了让你一步一步地学习,如果你说唯一不起作用的是按钮功能,那么你的代码可能会起作用。尝试使用全局变量而不是局部变量,如下所示:

    $("#rname").keyup(function() {
        uname = checkUsername(); // var removed
    });     // Username keyup
//--------------------------------------------------//  Username Checking
    $("#rmail").keyup(function() {
        umail = checkEmail();
    });     // Email keyup // var removed
//--------------------------------------------------//  Email Checking
    $("#passone, #passtwo").keyup(function() {
        upass = checkPass(); // var removed
    });     // Email keyup that the variables can be read from all functions in the call to button()

关于同步和异步编程

同步和异步是相对简单的概念。

同步是"正常"类型的编程:一件接一件。你调用一个函数,它返回,然后进程继续等等。

异步是指你调用某个东西(服务器、web服务等),并将一个函数与它关联起来,当它完成时,你无法控制它何时发生。所以你无法控制先发生的事情。假设您进行了2次ajax调用,并为它们分配了两个不同的函数。您不能确定哪个函数将首先运行。但没有什么能阻止你做以前做的事情:创建一个等待循环,当这些变量设置为true时运行,并使函数更新某些变量以退出等待循环。你只需要考虑到这种回归可能永远不会发生。服务器上可能存在错误,ajax调用根本不会返回或返回错误。因此,在这种情况下,您必须考虑不要执行无限循环。设置一个错误函数,设置另一个变量来中断cicle或其他什么。或者,设定一个时间间隔,如果超过该时间间隔,循环将被中断。

我希望这可能已经向你解释了一些概念。