2011-07-25 32 views
1

以下のコードを検証するにはどうすればよいですか? software_nameという名前の入力がnullでないことを検証します。コードを書く方法? 検証ルールは単一入力のみをサポートします。Jquery検証でフォーム配列の検証

<input name="software_name[]" type="text" class="input_txt_l software-name" value="" /> 
<input name="software_name[]" type="text" class="input_txt_l software-name" value="" /> 
<input name="software_name[]" type="text" class="input_txt_l software-name" value="" /> 
<input name="software_name[]" type="text" class="input_txt_l software-name" value="" /> 
2011年7月26日に

============================更新======== ================

私はあなたの助けを理解できません、私は明確に説明していないと思います。再度お試しください。

私はこの検証をフォームの検証に使用します。 http://bassistance.de/jquery-plugins/jquery-plugin-validation/

単一入力を検証するときに、これを使用してname要素を検証できます。 htmlコード:

<form action="url/saved" method="post" id="server-form"> 
    Name:<input name="name" type="text" class="input_txt" value=""/>  
</form> 

javascriptのコード:

var v = $('#server-form').validate({ 
     rules:{ 
      name:{ 
      required:true, 
      minlength:2, 
     maxlength:64 
      } 
     }, 
     messages:{ 
      name:{ 
      required:'can not be null', 
      minlength:"too short", 
     maxlength:"too long" 
      } 

     }, 

     onfocusout: function(element) { 
     if (!this.checkable(element)) { 
      this.element(element); 
     } 
     }, 

     errorPlacement: function(error, element) { 
      $(element).setValidateError({ 
     errorBox:error 
      }); 
     }, 

     success: function(element) { 
      $(element).setValidateOK(); 
    } 

    }); 

が、我々は、フォームの配列を使用する場合。このように

<input name="software_name[]" type="text" class="input_txt_l software-name" value="" /> 

jquery-validation-pluginはサポートしていません。私は正しい?

唯一の方法は、@rharshathが好きなように見えますか?

$('.software-name').each(function(i, $input) { 
    if($.trim($input.val()) == "") { 
     // go nuts - alert it, or highlight that field, 
     // or put a tooltip beside it - whatever. 
    } 
}); 

自分でハックする必要がありますか?

答えて

2

以下の手順に従ってください。

1)オープンjquery.validate.jsは
2ファイル)checkForm検索:関数(){
3)以下のコードでこの機能を交換します。

checkForm: function() { 
    this.prepareForm(); 
    for (var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++) { 
     if (this.findByName(elements[i].name).length != undefined && this.findByName(elements[i].name).length > 1) { 
      for (var cnt = 0; cnt < this.findByName(elements[i].name).length; cnt++) { 
        this.check(this.findByName(elements[i].name)[cnt]); 
      } 
     } else { 
      this.check(elements[i]); 
     } 
    } 
    return this.valid(); 
} 
+0

これは良いアイデアです。たくさんのことをありがとう。インスタンス内でこのメソッドを上書きできることがわかりました。 – 9nix00

+1

インスタンスでこのメソッドをどのようにオーバーライドしましたか? –

+0

@JAB私はそれを置き換えるが、まだ私のために働いていない –

1

使用します。if($( 'ソフトウェア名[値= ""!]。 ')の長さ== $(' ソフトウェア名。')の長さ。。)このような

0

$('.software-name').each(function(i, $input) { 
    if($.trim($input.val()) == "") { 
     // go nuts - alert it, or highlight that field, 
     // or put a tooltip beside it - whatever. 
    } 
}); 

あなたが検証したプラグインがあなたの望むものをサポートしていない場合は、ソースコードを取り出してそれを修正してあなたが望む機能を持たせるか、フルプラグインを自分で作成することができます(これは "do not doその「領土」)。

あなたがやっていることがみんながやっていることとは特に異なるものなら、プラグインはあなたの解決策ではないことがよくあります。それは大丈夫ですが、より多くのコードを書いてプラグインに頼る必要はありません。

痛みのないゲイン。

+0

こんにちは、@ jrharshath、私はまだ問題があり、私は自分の投稿を更新します。 – 9nix00

+0

を理解してください。 :) – 9nix00

1

私は、これは長い間死んで質問です知っているが、私は今日、この問題に遭遇したとjQueryの検証と全体form_field[]問題を回避する別の方法を思いつきました。

私がやっていたことは、PHPを使って複数のフォームフィールドをエコーアウトしていたことでした。 jQuery Validateの問題は、名前が同じことです。まだそのような名前に配列インデックスを追加することによって、その配列の動作を維持しながら、だから私は、名前が固有のもの:

<?php for ($i=0; $i<10; $i++) { ?> 
    <input type='text' name='anArray[<?php echo $i;?>]' class='required'/> 
<?php } ?> 

<script> 
    $(function(){ 
     $('form').validate(); 
    }); 
</script> 

今では魔法のように動作する - などの高度なルールは明らかに別の厄介なループを必要とするが、またはそのようなものがいくつかありますが、私の場合はrequired部分のみ必要です。これが他の人に役立つことを願っています

+0

私はあなたの提案をフォローしたが、これは私のためには動作しません。私のフォーム名は 'form_price_group [21] [price]'と似ていますが、もちろん各フィールドには独自のインデックスがあります。 –

+0

@PrimozRome私の使用例は1次元配列のためだけであり、2次元配列をテストしたり試したりしませんでしたあなたをさらに助けることはできません。解決策を見つけたら、別の答えを投稿してください:) – jammypeach