为什么这个ajax调用正在进行,即使它不应该

时间:2013-10-30 21:48:00

标签: javascript jquery ajax forms validation

我有这个验证脚本我正在努力,但无法理解为什么我有一个问题。

你可以看到我有一个check = false / true,在运行ajax调用之前检查。

但是,即使某个字段为空并且check设置为false,它仍然在运行该调用。

这样:

// JavaScript - Update Password AJAX

$(document).ready(function () {

    // When the form is submitted
    $('.updatepasswordform').submit(function () {

        var check = true;

        // Get the values
        var password1 = $("input[name=password1]").val();
        var password2 = $("input[name=password2]").val();
        var newpassword = $("input[name=newpassword]").val();

        /* Password Validation */

        // If fields are empty
        if (password1 === '') {
            check = false;
            $("input[name=password1]").css('border', 'solid 2px red');
        }

        // If fields are empty
        if (password2 === '') {
            check = false;
            $("input[name=password2]").css('border', 'solid 2px red');
        }

        // If fields are empty
        if (newpassword === '') {
            check = false;
            $("input[name=newpassword]").css('border', 'solid 2px red');
        }

        if (check = true) {
            $.ajax({
                type: "POST",
                url: "process/updatepassword.php",
                data: $(".updatepasswordform").serialize(),
                dataType: "json",
                success: function (response) {

                    /* Checks for database validation, removed for space saving */

                }

            });
        }
        return false;
    });
});

3 个答案:

答案 0 :(得分:2)

if (check = true)是作业。你需要一张支票。

if (check == true) {

或者正如JasonP提到的那样,只是

if (check) {

答案 1 :(得分:1)

你只在if语句中使用单个equals。将其更改为此

if (check == true) {

甚至更好

if (check) {

答案 2 :(得分:0)

您正在使用作业=而不是比较==来测试check。而不是......

if (check = true) {

你打算写这个:

if (check == true) {

这是一个常见的陷阱。在true语句的条件内将check分配给if是完全有效的,但在这种情况下,它不是您的意图。 check = true的结果是 true(允许并行分配,a = b = c = true工作),所以实际上你正在做{{1} }。这是可取的,但是在意外使用时常常是麻烦的根源。一般用法是将表达式的结果赋给临时变量,该变量的作用域为if (true)语句。

基本上,而不是......

if

...它可以让你写下来:

var result = expensiveCalculation()
if (result) {
  // do something with result
}

注意:

在这种特殊情况下,当您对布尔if (result = expensiveCalculation()) { // do something with result } / true进行测试时,最好只编写falseif (check),而不是使用{显式比较{1}}。

注2:

“check”是一个特别糟糕的变量名称。你的变量应该具有表现力;没有评论的帮助,我应该知道它的作用。在这种情况下,我已将其命名为至少 if (!check),或可能==,或反转您的支票并使用validformIsValid