我有这段代码:
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()
函数,而是只调用一次。
我已经包含了一个counter
变量用于调试目的(甚至在$(this)
循环中记录了each
),但是循环似乎很好。只有循环的第一个元素才会调用validateParameter()
。
validateParameter()
函数不涉及ajax调用,它只是一堆赋值和if / else语句。事实上,我甚至尝试删除整个函数体并改为使用它:
function validateParameter()
{
console.log('meh');
return false;
}
但当然它只记录一个'meh'。
可能导致此问题的原因是什么?
答案 0 :(得分:1)
Logical AND(&&)如果可以转换为false,则返回isFormValid
;否则返回validateParameter($(this))
。
第一次循环isFormValid
为true
,因此执行validateParameter($(this))
并返回结果。在这种情况下,false
分配给isFormValid
。
循环执行isFormValid
的任何连续时间都是false
,因此它是不可用的,validateParameter($(this))
不会再次执行。
引用链接文档:
<强>操作强>
逻辑AND(&amp;&amp;)<强>用法强>
expr1&amp;&amp;表达式2<强>描述强>
如果可以转换为false,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,&amp;&amp; 如果两个操作数都为真,则返回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;
}
答案 1 :(得分:0)
因为您正在将isFormValid值重置为false(validateParameter
中的“return false;”)
isFormValid && validateParameter( $(this) );
validateParameter
只有在isFormValid为true时才会执行。
答案 2 :(得分:0)
您的validateParameter函数返回false。
isFormValid = isFormValid && validateParameter( $(this) );
在第一次传递之后,isFormValid变为false(第一次,它是真的&amp; validateParameter =&gt;这导致false并将其存储在isFormValid中)
第二遍
isFormValid = isFormValid && validateParameter( $(this) );
不会调用validateParameter,因为isFormValid已经为false且评估不会评估validateParameter。
这就是问题所在。从validateParameter返回true,你会看到它按照你期望的方式工作。
干杯! SUJ