3

私はこのコードを持っています:

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;
}

しかしもちろん、ログに記録されるのは 1 つの「meh」だけです。

この問題の原因は何ですか?

4

3 に答える 3

1

論理積(&&)isFormValidは、falseに変換できる場合に返さそれ以外の場合はを返しますvalidateParameter($(this))

初めてループするのisFormValidはですtrue。したがって、validateParameter($(this))が実行され、結果が返されます。この場合false、これはに割り当てられisFormValidます。

ループが連続して実行さisFormValidれるたびに、ループfalseがすぐに使用され、validateParameter($(this))再度実行されることはありません。


リンクされたドキュメントから引用するには:

演算子
論理積(&&)

使用法
expr1&&expr2

説明
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;
}
于 2013-03-20T17:43:52.417 に答える
0

あなたの validateParameter 関数は false を返しています。

isFormValid = isFormValid && validateParameter( $(this) );

最初のパスの後、isFormValid は false になります (最初は true & validateParameter => であり、結果は false になり、isFormValid に格納されます)。

2回目のパスで

isFormValid = isFormValid && validateParameter( $(this) );

isFormValid が既に false であり、評価で validateParameter が評価されないため、validateParameter は呼び出されません。

それが問題だ。validateParameter から true を返すと、期待どおりに動作することがわかります。

乾杯!スジ

于 2013-03-20T17:38:47.430 に答える
0

isFormValid 値を false にリセットしているため ( の「return false;」validateParameter)

isFormValid && validateParameter( $(this) ); validateParameterisFormValid true の場合にのみ実行されます。

于 2013-03-20T17:35:10.133 に答える