0

html input:checkbox アイテムのセットがあります。これらのアイテムの 1 つに無効な属性があります。予期される動作は、jquery 検証プラグインが無効な属性を持つ入力を無視するが、無効化されていない他の要素の検証を処理することです。

<input type="checkbox" name="example[]" value="1" minlength="1" required="required" disabled="disabled" />
<input type="checkbox" name="example[]" value="2" minlength="1" required="required" />
<input type="checkbox" name="example[]" value="3" minlength="1" required="required" />

動作を実証するためにライブ サンプルを作成しました。http://jsfiddle.net/cVMBA/24/

この場合、少なくとも 1 つのチェックボックスが選択されていることが予想されます。そうでない場合は、エラーが表示されます。私が見ることができるように、動作は本当に奇妙です。コンソールを見ると、最初にerrorPlacement関数が起動され、その後unhighlight関数が起動されることがわかります。ここでの問題は、エラーが表示されないことです。

属性disabled="disabled"を削除すると、プラグインは期待どおりに動作します。この動作をオーバーライドするためのアイデア、またはハックはありますか?

4

1 に答える 1

1

disabled="disabled"ここに示されているように 、プラグインは属性に関して正常に動作しています: http://jsfiddle.net/4fShN/

あなたのコードについて:

$('#test_validate').validate({
    ignore : [],
    unhighlight : function(element, errorClass, validClass){
         $('#test_validate').removeClass('error-highlighted');
    },
    errorPlacement: function(error, element) {           
        $('#test_validate').addClass('error-highlighted').find('.error-div').text('Select radio button');
    },
    submitHandler: function(form) {
            alert('form ok');
    }
});

highlightコールバックを補完するコールバック関数がありませんunhighlight。エラー要素を最初errorPlacementに配置するときにのみ起動することに注意してください。エラーに合わせて切り替えたい場合は、それが目的であり、関数が使用されることになっています。labelhighlightunhighlight

また、コードは、要素$('#test_validate')の を含む にクラスを適用しています。通常、含まれているパラメーターを使用して、エラーのある要素からクラスを適用および削除します。id<form><input>element

    highlight : function(element, errorClass, validClass){
        $(element).addClass('error-highlighted');
    },
    unhighlight : function(element, errorClass, validClass){
        $(element).removeClass('error-highlighted');
    },

さらに簡単にするために、上記のコードは、オプションvalidClasserrorClassオプションを定義するだけで削除できます。なぜ削除できるのですか?上記の 2 つの機能は、基本的にデフォルトのプラグインの動作と同じだからです。

errorClass: "error-highlighted",
validClass: "valid"

ドキュメントを参照してください: http://jqueryvalidation.org/validate

于 2013-07-28T19:09:46.280 に答える