Jquery 每个()只被调用一次
我有以下代码:Jquery 每个()只被调用一次,jquery,function,loops,each,Jquery,Function,Loops,Each,我有以下代码: function paramsFormValidate() { isFormValid = true; var counter = 0; $('.par-item input[type="number"]').each(function() { isFormValid = isFormValid && validateParameter( $(this) ); counter++; }); c
function paramsFormValidate()
{
isFormValid = true;
var counter = 0;
$('.par-item input[type="number"]').each(function() {
isFormValid = isFormValid && validateParameter( $(this) );
counter++;
});
console.log(counter);
return isFormValid;
}
这是为了我必须构建的自定义验证。问题是,应该为每个输入元素调用validateParameter()
函数,但只能调用一次
我在每个循环中都包含了一个计数器
变量以进行调试(甚至记录了$(此)
),但循环似乎很好。仍然validateParameter()
将仅为循环的第一个元素调用
validateParameter()
函数不涉及ajax调用,它只是一组赋值和if/else语句。事实上,我甚至尝试删除整个函数体并使用它:
function validateParameter()
{
console.log('meh');
return false;
}
当然,它只会记录一个“meh”
是什么导致了这个问题 因为您正在将isFormValid值重置为false(“返回false;”在validateParameter
中)
isFormValid&&validateParameter($(this))代码>validateParameter
仅在isFormValid为true时执行。您的validateParameter函数返回false
isFormValid = isFormValid && validateParameter( $(this) );
第一次通过后,isFormValid变为false(第一次为true&validateParameter=>这将导致false并将其存储在isFormValid中)
第二关
isFormValid = isFormValid && validateParameter( $(this) );
将不会调用validateParameter,因为isFormValid已为false,并且计算将不会计算validateParameter
这就是问题所在。从validateParameter返回true,您将看到它以预期的方式工作
干杯!
Suj如果可以转换为false,则返回isFormValid
;否则它将返回validateParameter($(this))
第一次循环isFormValid
是true
,因此执行validateParameter($(this))
,并返回结果。在这种情况下,false
分配给isFormValid
循环执行的任何连续时间isFormValid
都是false
,因此它被立即使用,并且validateParameter($(this))
不会再次执行
引用链接文档:
操作员
逻辑AND(&&)
用法
expr1和expr2
说明
如果可以将expr1转换为false,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时&&
如果两个操作数都为true,则返回true;否则,返回false
编辑
..应为每个输入调用validateParameter()
函数
元素
在这种情况下,您需要类似以下内容:
function paramsFormValidate() {
isFormValid = true;
$('.par-item input[type="number"]').each(function () {
// Validate each element...
if(!validateParameter($(this)){
// validation has failed on an element, indicate the form is invalid
isFormValid = false;
}
// optionally, continue or exit if isformIsValid === false
});
return isFormValid;
}
你能创建一个JSFIDLE吗?@ValerioBulla:如果你想对每个元素运行验证方法,但也希望能够指出表单上是否有任何验证失败,你需要稍微更改循环以始终执行该方法,如果返回false
,则只记录该结果。我已经在我的答案中添加了一个实现示例。谢谢,这是非常好的信息。我不知道如果第一个操作数为false,它将停止计算。我已经更新了我的函数,现在它可以正常工作了。干杯