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

时间:2016-05-13 22:09:22

标签: javascript php jquery

我正在尝试办理注册表格。如果所有okey函数都返回true,我用三个函数检查6个东西,否则为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";

    }

}

1 个答案:

答案 0 :(得分:1)

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

jQuery Ajax POST example with PHP

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

    $("#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()

关于同步和异步编程

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

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

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

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