0

クライアント側で検証したいフォームがあり、タスクに jQuery Validate を使用しています。検証は他の (入力) フィールドでは機能しますが、チェックボックスでは機能しません。

私は何を間違っていますか?

<form name="insert_new_lesson" id="insert_new_lesson" method="post" action="" class="lesson-form" enctype="multipart/form-data" novalidate="novalidate">
    <input class="{category: true}" type="checkbox" name="category[]" value="15" id="grade15">
    ... rest of the fields...


$("#insert_new_lesson").validate({
    errorPlacement: function (error, element) { 
        error.insertBefore(element);    
    },
    rules: {
        category: {
            required: 'input[type="checkbox"]:checked',
        },
        ...rest of the fields (validation works)
4

4 に答える 4

1

これを試して:

$.validator.addMethod('atLeastOne', function(value, element, param) {
    return $('input[name^="category"]').is(':checked');
}, 'Please select at least one checkbox');

$(function() {
    $("#insert_new_lesson").validate({rules: {
            'category[]': 'atLeastOne'
        }, groups: {
            checkboxes: 'category[]'
        }, errorPlacement: function(error, elem) {
            if (elem.attr('name').match(/category\[\]/)) {
                $('input[name^="category"]:last').next().after(error);
            }
            else {
                elem.next().after(error);
            }
        }
    });
});
于 2013-03-06T15:26:33.053 に答える
1

それはjQuery Validatorの現在の問題です。公式リポジトリでこの問題を参照してください。

コメントの 1 つに記載されているように、同じ名前のフィールドを検証できるようにするには、次の操作を行う必要があります。

$.validator.prototype.elements = function() {
    var validator = this;
    // select all valid inputs inside the form (no submit or reset buttons)
    return $(this.currentForm)
        .find(":input")
        .not(":submit, :reset, :image, [disabled]")
        .not( this.settings.ignore )
        .filter(function() {
            !this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
            return validator.objectLength($(this).rules());
        });
};

GitHub のコメントからコードを変更したことに注意してください。ユーザー dsand1234 が を使用しました。これは5 行目find("input")にあるはずです。find(":input")

于 2013-03-06T14:54:07.260 に答える
0

これは私にとってはうまくいき、簡単な解決策です。ルールの「名前」を引用符で囲むだけです。

rules: {
    'category[]': {
        required: true
    }
}

この解決策は、別の投稿 hereで見つけました。

于 2013-07-18T22:23:53.003 に答える
0

json に対してこの構文を試していただけますか (外側は一重引用符、キーは二重引用符):

class='{"category": true}'
于 2013-03-06T14:33:12.257 に答える