JQuery $()。每个退出太早

时间:2018-03-14 03:13:15

标签: javascript jquery validation each

我正在使用下面的函数来验证Web表单上的几个输入字段。该函数使用jQuery .each()迭代遍历字段。 ValidateInput函数验证每个单独的输入字段,返回true或false。

function ValidateForm() {
    var result = true;
    $('[data-regex]').each(function() {
        result = result && ValidateInput(this);
        // return true;
    });

    if ( result == false ) {
        $(".alert").show();
    }

    return result;
}

我遇到的问题是,只要任何单个输入字段验证失败,.each()就会提前终止。我知道如果function()返回false,.each()将终止,但我不知道我是怎么做的。我甚至尝试添加一个明确的return true;作为function()的最后一行,但这没有任何区别。

为了完整性,这里是ValidateInput

function ValidateInput(thisInput) {
    var fieldName = $(thisInput).attr('name');
    var fieldValue = $(thisInput).val();
    var regex = $(thisInput).attr('data-regex');
    console.log('validating field "' + fieldName + '" value "' + fieldValue + '" with regEx "' + regex + '"';
    var re = new RegExp(regex);
    var result = re.test(fieldValue);
    if ( result ) {
        console.log('- passed');
        $(thisInput.closest(".form-group")).addClass("has-success").addClass("has-feedback")
    } else {
        console.log('- failed');
        $(thisInput.closest(".form-group")).addClass("has-error").addClass("has-feedback")
    };

    return result;
}

调用ValidateForm的代码如下:

<input type="submit" name="ct108" value="Save User" onclick="return ValidateForm();" />

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您的ValidateInput方法在第一个没有通过验证的方法后停止处理,因为这一行:

result = result && ValidateInput(this);

&&的工作方式是,如果左侧的项目是真实的,则右侧的值将作为值返回,否则左侧的值将作为值返回。

您可以保证每一个都是通过翻转来处理的:

result = ValidateInput(this) && result;