在javascript中链接的IF语句

时间:2015-06-02 13:58:03

标签: javascript

每当我连续两次调用一个函数时,它只评估第二个函数并离开第一个函数。同样在链式IF语句中,它不能按预期工作。它总是跳到''''。继承我的代码

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>

1 个答案:

答案 0 :(得分:1)

$.ajaxvalEmail中使用valUname进行异步请求,这意味着函数始终在请求完成之前返回。由于在$.ajax行之后没有显式返回,因此函数返回undefined,其被视为false。从这个意义上讲,valEmailvalUname将始终返回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请求。