0

要素にjQuery検証を使用しているフォームがあります。フォームには、2つのテキストフィールドと一連のチェックボックスが含まれています。私のコードの関連部分は次のようになります。

$.validator.addMethod('require-one', function (value) {
    return $('.require-one:checked').size() > 0;
}, 'Who should see your question?');

var checkboxes = $('.require-one');
var checkbox_names = $.map(checkboxes, function(e,i) { return $(e).attr('name')}).join(' ');

$('FORM#node-form').validate({
    groups: { checks: checkbox_names },
    errorPlacement: function(error, element)
    {
        if (element.attr('type') == 'checkbox') {
            error.insertAfter('#user_role_buttons > div > label');
        }
        else {
            error.insertAfter(element);
        }
    }
});

チェックボックスをグループとして処理するには、新しいメソッドと「チェックボックス」が必要です。これは、#user_role_buttons内にエラーメッセージを配置するなど、実際には正しく機能しています。

私の問題/質問は、2つのテキスト要素のエラーメッセージの配置を設定する方法が見つからないことです。これらのアイテムの検証は正しく機能しています。私は彼らの位置を特定することはできません。特に、これらの項目に関連するエラーは、検証ハンドラーのerrorPlacement句に表示されません。errorPlacementの関数内にconsole.log(element)ステートメントを配置して何が起こっているかを確認すると、表示されるのはチェックボックスに関連するエラー(1つあると仮定)。テキストアイテムのメッセージは、半合理的な場所に配置されていますが、私が望む場所には配置されていません。

私は何かが欠けているに違いありません。誰かがそれが何であるかを見ることができますか?

4

1 に答える 1

0

OK、これが「正しい」かどうかはわかりませんが、何かが機能しています。この時点での私の信念は、「グループ」に対して何かを定義したら、それが単一のものであっても、検証したいすべてのものをグループとして定義する必要があるということです。したがって、上記のコードの作業バージョンは次のようになります。

$.validator.addMethod('require-one', function (value) 
                                                { return $('.require-one:checked').length > 0; }, 
                                                'Who should see your question?'
                              );
var checkboxes = $('.require-one');
var checkbox_names = $.map(checkboxes, function(e,i) { return $(e).attr('name')}).join(' ');
$('FORM#node-form').validate({
                        groups: { 
                            checks: checkbox_names,
                            title: 'title',
                            body: 'body',
                            },
                        errorPlacement: function(error, element) {
                                 if (element.attr('type') == 'checkbox') {
                                    error.insertAfter('#user_role_buttons > div > label');
                                 }
                                 else if (element.attr('type') == 'text') {
                                    error.insertAfter('#edit-title-wrapper > label');
                                 }
                                 else if (element.attr('name') == 'body') {
                                    error.insertAfter('#edit-body-wrapper > label');
                                 }
                        }         
            });

つまり、「タイトル」と「本文」をグループとして定義し、それぞれがフィールドの「名前」を指すようにします。これらは、errorPlacement ハンドラーの呼び出しで表示され、それらの存在をテストして、必要な方法で配置を割り当てることができます。私が期待していたものとはまったく異なりますが、事後的には理にかなっていると思います....

于 2012-07-18T15:59:12.440 に答える