2011-11-15 22 views
2

私はここで説明されている方法を使用しています:http://iamcam.wordpress.com/2008/01/15/unchecked-checkbox-values/チェックボックスをオフにしても値を取得するには、なぜこれが必要なのか詳しくはわかりませんが、必要です。それは言われている..同じ名前を持つ入力を検証する

すべてのこの素晴らしいメソッドは、私が自分自身を書いたフォームの抽象レイヤの一部です、私は、私はjquery検証によって検証するためにいくつかのチェックボックスを持って、問題は、何が起こることは、彼らが同じ名前の両方を持っているのでjqueryの検証は、2つ(の最初の入力を検証することである

<input class="" type="hidden" value="0" name="check[legal]"> 
<input id="legal" class="required" type="checkbox" name="check[legal]" value="1"> 

私は最初の1つだけを削除することができますし、それを行うことを理解し、このようなものです。 2つ目のチェックボックスを有効にして、それをそのまま残しておく方法があるかどうかを知りたいだけです(2つの道路があります:1)入力のIDから検証します2)隠れ要素を検証から除外します)そのように思えば、同じ名前を持つ2番目のものさえも避けることができます。)

+2

なぜ同じ名前を持つ必要がありますか?それらは同じグループのチェックボックスの一部ですか?そうであれば、一緒に検証されます。そうでなければ、異なる名前を割り当てます。これは簡単なので、私は何が欠けているようですか? – Sparky

+0

あなたは私がこの質問を避けるために投稿した記事を誤解します。 2番目のもの(目に見えるもの)がチェックされなければ、$ _POST配列の中ではなく0になります。 – 0plus1

+0

JavaScriptを使用して、チェックボックスの値を別の隠しフィールドにコピーし、その代わりにそのフィールドを送信/使用します。何かがポスト配列の一部であるという理由だけで、それを使用する必要はありません。 – Sparky

答えて

3

さて、あなたの質問に対する直接的な答えは、カスタム検証メソッドをshown in this exampleとして定義できるということです。

$.validator.methods.checkLegal = function(value, element) { 
    return $('input[type=checkbox][name="check[legal]"]').attr('checked'); 
} 

$('form').validate({ 
    rules: { "check[legal]": {checkLegal: true} }, 
    messages: { "check[legal]": "You must check the box" }, 
}); 

ただし、入力したリンクに記載されている原則を使用するために、フィールドに同じ名前を付ける必要はありません。実際には、そうしないと大変簡単になります。これがチェックボックスリストでない場合、変数名に中括弧が必要な理由も不明です。

つまり、同じ名前を使用していないhere is a simple exampleは、隠し値を格納し、表示されるチェックボックスを検証します。上記ビーイングの交換:サーバー上

jQuery(function($) { 
    $('form').validate({ 
     rules: { "check[legal]": "required" }, 
    }); 

    $('#legal').click(function(e) { 
     $('#legalHidden').val($(this).attr('checked') ? 1 : 0); 
    }); 

}); 

は、単に[legalhidden]をチェックし、チェック[法的]を気にしないで参照します。クライアントでは、すべての検証はcheck [legal]で行われ、値はクリックされるたびにlegalhidden varにコピーされます。

+0

答えをありがとう。変数名の中括弧はPOST配列の処理を助けるためのものです。たとえば、検証を解除した後にチェックをダンプするなどです($ _ POST ['check'])。 – 0plus1