0
function getGroup(el){
    return $(el).parents('.field');
}

function validateGroup(group){
    var count = 0;
    $(group).find("input[type!='hidden'], select").each(function(){
        if( $(this).val() )
            count++;
    });
    if($(group).find("input[type!='hidden'], select").length == count || count == 0)
        return true;
    else
        return false;
}
    $.tools.validator.fn(
    $("#addressInfo .field select, #addressInfo .field input[type!='hidden']"),
    "Please Complete this mandatory field",
    function(el, v){
        if( !testOptionalFieldsValidation(el) && ($(el).val().length == 0 ) )
            return false;
        else
            return true;
    }
    );
    function testOptionalFieldsValidation(el){
    group = getGroup(el);
    return validateGroup(group);
}

"

上記の指定されたコードは、フィールドの検証に使用されています。シナリオは、ユーザーが単一のフィールドの値を入力すると、それらすべてを入力すると想定される場合、そうでない場合はバリデーターがそれらのフィールドに入力することを指摘するようなものです。上記の指定されたコードは、これまでの要件に従って機能していましたが、オプションのループ可能な住所情報セクションも提供され、ボタンをクリックして詳細を入力できます。これにより、通り (入力タイプ) 市 (入力タイプ) 州 (タイプを選択) 国 (タイプを選択)..合計でデフォルトのフィールドは 6 ですが、[住所情報を追加] ボタンをクリックすると、6 つのフィールドだけでなく 12 のフィールドすべてが検証され、それぞれエラー メッセージが表示されます。私の知識とスキルの限りでは、それは JQUERY ツールのバグでした。

4

1 に答える 1

0
$('form').submit(function(){
    $('form').validator();
    $.tools.validator.fn(
        $("#addressInfo .field select, #addressInfo .field input[type!='hidden']"),
        "Please Complete this mandatory field",
        function(el, v){
            if( !testOptionalFieldsValidation(el) && ($(el).val().length == 0 ) )
                return false;
            else
                return true;
        }
        );
    function testOptionalFieldsValidation(el){
        group = getGroup(el);
        return validateGroup(group);
    }

});

私のコードの修正は、カスタム検証関数を初期化したとしても、送信イベントでコンストラクターを呼び出してバリデーターを初期化する必要があることです。

于 2011-03-04T13:07:52.960 に答える