0

我正在处理这个验证脚本,但不明白为什么我有问题。

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

但是,即使某个字段为空且检查设置为 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;
    });
});
4

3 回答 3

2

if (check = true)是赋值。你需要一张支票。

if (check == true) {

或者正如 JasonP 提到的,只是

if (check) {
于 2013-10-30T21:49:12.833 回答
1

您只在 if 语句中使用了一个等号。改成这个

if (check == true) {

甚至更好

if (check) {
于 2013-10-30T21:49:27.973 回答
0

您正在使用分配,=而不是比较==,来测试check。而不是这个...

if (check = true) {

你的意思是写这个:

if (check == true) {

这是一个常见的陷阱。在语句的条件内分配trueto是完全有效的,但在这种情况下,这不是你想要做的。结果也是(允许并行分配 ,工作),所以本质上你在做. 这是可取的,尽管在意外使用时通常会造成麻烦。一般用途是将表达式的结果分配给限定为语句的临时变量。checkifcheck = true truea = b = c = trueif (true)if

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

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

...它可以让你这样写:

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

笔记:

在这种特殊情况下,当您针对 boolean true/进行测试时false,最好简单地编写if (check)orif (!check)而不是显式比较 using ==

笔记2:

“check”是一个特别糟糕的变量名。你的变量应该是有表现力的;我应该知道它的作用,无需评论的帮助。在这种情况下,我至少 valid会调用它,或者可能会调用它formIsValid,或者反转你的检查并使用var errors = falseand if (!errors)

于 2013-10-30T21:53:37.370 回答