0

フラグが正しくリセットされないという問題が発生しています。

以下のコードがあります。私はIE8に固有のこのコードを書いています。フィールドのぼかしでは、フィールドのクラスを反復処理し、クラス検証のいずれかが false を返す場合、エラーを表示して を設定する必要がありますflag4=false。次に、送信ボタンをクリックすると、すべてのフラグが true かどうかを確認し、true の場合は true を返す必要があります。

しかし、今on blurは正しく起こっています。検証に失敗した場合はエラーが表示され、後でエラーを正しい形式に変更すると、緑色で表示されます。しかし、flag4は常に返されfalseます。常に false を返すため、フォームが正常に送信されず、ユーザーは次のページに移動できません。私の質問は、どこで値をリセットすればよいflag4ですか?

多くのオプションを試しましたが、ボタンをクリックすると失敗します。一度flag4=false、すべてのフィールドを正しく指定した後でも true になりません。

var flag4 = true;
if(navigator.appVersion.indexOf("MSIE 8.0") != -1) {
    var firsttime=false;
    var validators = {
        fn1: function(val) {
            //return true or false;
        },
        fn2: function(val) {
            //return true or false;
        }
    };

    $('#submit_form :input').not('#id1,#id2,#id3').blur(function() {
        var input = $(this);
        var returnVal1 = true;
        input.next('div.error_text').remove();
        input.removeClass('highlight');
        // Get all the classes of the current input
        if(this.className) {
            var classes = this.className.split(/\s+/);
            for(var p in classes) {
                if(classes[p] in validators) {
                    returnVal1 = returnVal1 && validators[classes[p]] (input.val());
                }
            }
        }

        if(returnVal1 == false) {
            firsttime=true;
            $(this).removeClass('green');
            $(this).addClass('highlight');
            var $msg = $(this).attr('title');
            input.after('<div class="error_text">'+$msg+'/div>');
            flag4 = false; 
        }

        if(returnVal1 == true && firsttime == true) {
            input.addClass('green');
        }

    });
}

$('#submitbtn').click(function() {
    var flag1, flag2, flag3 = true;
    if(flag1 && flag2 && flag3 && flag4) {
        returnvalue = true;
    } else{
        returnvalue = false;
    }
    return returnvalue;
});

ユーザーが最初に入力したときにいずれかの検証が false を返した場合、firsttime=true. ユーザーが 2 回目に正しい値を入力すると、そのフィールドは緑色になります。そのために私は使用していますif(returnVal1 == true && firsttime == true)

4

1 に答える 1

0

コメントで@nnnnnnが言ったように、flag4設定されている唯一の場所trueは変数宣言です。しかし、それをonblur関数の先頭に追加しないでください。そうすれば、他の何かによってに設定されtrueない限り、つまり、エラーが発生して に設定されない限り、 に設定されます。falsefalse

$('#submit_form :input').not('#id1,#id2,#id3').blur(function() {
        flag4 = true;
        // ...
});
于 2013-10-23T09:38:10.023 に答える