我正在使用下面的函数来验证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();" />
我错过了什么?
答案 0 :(得分:2)
您的ValidateInput
方法在第一个没有通过验证的方法后停止处理,因为这一行:
result = result && ValidateInput(this);
&&
的工作方式是,如果左侧的项目是真实的,则右侧的值将作为值返回,否则左侧的值将作为值返回。
您可以保证每一个都是通过翻转来处理的:
result = ValidateInput(this) && result;