javascript中的链接IF语句

javascript中的链接IF语句,javascript,Javascript,每当我连续调用一个函数两次时,它只计算第二个函数并保留第一个函数。同样在链式IF语句中,它也不能像预期的那样工作。它总是跳转到“else”。这是我的密码 if (valNames() && valEmail() && valUname()) { l1.hide(); l2.show(); } 更新以下是完整代码: <script type="text/javascrip

每当我连续调用一个函数两次时,它只计算第二个函数并保留第一个函数。同样在链式IF语句中,它也不能像预期的那样工作。它总是跳转到“else”。这是我的密码

if (valNames() && valEmail() && valUname()) {
                l1.hide();
                l2.show();
            }
更新以下是完整代码:

<script type="text/javascript">

        $(document).ready(function () {

            var cont = $('#cont');
            var l1 = $('#l1');
            var l2 = $('#l2');
            var names = $("#names");
            var uname = $("#uname");
            var email = $("#email");
            var err = $('#error');

            email.blur(function () {
                valEmail();
            });

            uname.blur(function () {
                valUname();
            });

            l2.hide();

            cont.click(function () {

                if (valNames() == true && valEmail() == true && valUname() == true) {
                    l1.hide();
                    l2.show();
                }
            });


            function valNames() {

                if (names.val().length < 5) {
                    names.css({'border-color': 'red'});
                    return false;
                } else {
                    names.css({'border-color': 'blue'});
                    return true;
                }
            }

            function valEmail() {

                if (IsEmail(email.val())) {
                    $.ajax({
                        dataType: "json",
                        url: "se.php",
                        type: "POST",
                        data: {'r': '648am', 'i': 'ee', 'd': email.val(), 't': 2},
                        success: function (data) {

                            if (data.data == false) {
                                email.css({'border-color': 'blue'});
                                err.hide();
                                return true;
                            } else {
                                email.css({'border-color': 'red'});
                                err.html("The email you entered already exists. <a href='login'>login?</a>");
                                err.show();
                                return false;
                            }
                        }
                    });

                } else {
                    email.css({'border-color': 'red'});
                    return false;
                }
            }

            function valUname() {

                if (uname.val().length > 5) {
                    $.ajax({
                        dataType: "json",
                        url: "se.php",
                        type: "POST",
                        data: {'r': '648am', 'i': 'ue', 'd': uname.val(), 't': 1},
                        success: function (data) {

                            if (data.data == false) {
                                uname.css({'border-color': 'blue'});
                                err.hide();
                                return true;
                            } else {
                                uname.css({'border-color': 'red'});
                                err.html("The Username you entered already exists. <a href='login'>login?</a>");
                                err.show();
                                return false;
                            }
                        }
                    });

                } else {
                    uname.css({'border-color': 'red'});
                    err.html("The Username you entered is too short.");
                    err.show();
                    return false;
                }
            }

        });
    </script>

$(文档).ready(函数(){
var cont=$('续');
变量l1=$(“#l1”);
变量l2=$(“#l2”);
变量名称=$(“#名称”);
var uname=$(“#uname”);
var email=$(“#email”);
var err=$(“#error”);
email.blur(函数(){
valEmail();
});
uname.blur(函数(){
valUname();
});
l2.hide();
继续单击(函数(){
if(valNames()==true&&valEmail()==true&&valUname()==true){
l1.隐藏();
l2.show();
}
});
函数valNames(){
if(names.val().length<5){
css({'border-color':'red'});
返回false;
}否则{
css({'border-color':'blue'});
返回true;
}
}
函数valEmail(){
if(IsEmail(email.val())){
$.ajax({
数据类型:“json”,
url:“se.php”,
类型:“POST”,
数据:{'r':'648am','i':'ee','d':email.val(),'t':2},
成功:功能(数据){
如果(data.data==false){
css({'border-color':'blue'});
err.hide();
返回true;
}否则{
css({'border-color':'red'});
html(“您输入的电子邮件已经存在。”);
err.show();
返回false;
}
}
});
}否则{
css({'border-color':'red'});
返回false;
}
}
函数名(){
如果(uname.val().length>5){
$.ajax({
数据类型:“json”,
url:“se.php”,
类型:“POST”,
数据:{'r':'648am','i':'ue','d':uname.val(),'t':1},
成功:功能(数据){
如果(data.data==false){
css({'border-color':'blue'});
err.hide();
返回true;
}否则{
css({'border-color':'red'});
html(“您输入的用户名已经存在。”);
err.show();
返回false;
}
}
});
}否则{
css({'border-color':'red'});
html(“您输入的用户名太短。”);
err.show();
返回false;
}
}
});

通过在
valEmail
valUname
中使用
$.ajax
可以发出异步请求,这意味着函数总是在请求完成之前返回。由于在
$.ajax
行之后没有显式返回,因此函数返回
未定义的
,该函数被视为
false
。从这个意义上说,
valEmail
valUname
将始终返回
false

您最好的选择是完全更改逻辑,并采用如下方式:

$.ajax({ // first request to validate email
  ...,
  success: function() {
    ...
    if (emailValid) {
      $.ajax({ // second request to validate username
        ...,
        success: function() {
           if (usernameValid && valNames()) { // direct validation
              l1.hide();
              l2.show();
           }
        }
      });
    }
    ...
  }
})

有一些方法可以使其更简单,您可以使其并行化,而不是顺序化,但您仍然需要了解如何处理异步操作以及如何链接ajax请求。

这些函数返回的是什么?当然,您必须传递一个名称,通过这些函数发送电子邮件或取消电子邮件。@doveyg可能正在验证页面上某个字段的内容,或者类似的内容。您应该在if语句中包含函数的代码。您的问题对我来说毫无意义。一行两次是
a()&&b()
a()&&a()
a();b(),或
a();a()?尽管如此,在这些情况下,没有一个是第二次评估而没有第一次评估。哇,我从来没有想过!不过谢谢:)