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,它将停止计算。我已经更新了我的函数,现在它可以正常工作了。干杯