2011-07-25 102 views
1

我們如何驗證以下代碼? 我想驗證名爲software_name的輸入不爲null。如何編寫代碼? 驗證規則看起來只支持單個輸入。Jquery Validation validate form-array

<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/07/26 ======== ================

我不明白你的幫助,我想我解釋不清楚。再次嘗試。

我使用此驗證進行表單驗證。 http://bassistance.de/jquery-plugins/jquery-plugin-validation/

當我們驗證單個輸入時,我們可以使用它來驗證名稱元素。 的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說?我們不得不自己破解它嗎?

回答

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. 
    } 
}); 

如果你的驗證插件不支持你想要的,那麼你可以採取它的源代碼並修改它以獲得你想要的功能,或者你可以爲自己寫一個完整的插件(這是「不要那「領土)。

如果你正在做的事情與每個人都在做的事情完全不同,我經常會發現插件不會是你的解決方案。沒關係,但是你必須編寫更多的代碼,並且更少依賴插件。

無痛無增益。

+0

嗨,@ jrharshath,我還有一個問題,我更新我的帖子。 – 9nix00

+0

明白,thx很多。 :) – 9nix00

1

我知道這是一個死多頭的問題,但今天我遇到了這個問題,並與周圍的整個form_field[]問題jQuery驗證另一種方式上來。

我在做什麼是呼應多個表單域使用PHP。 jQuery驗證的問題是名稱是相同的。所以,我提出的名字獨特,同時仍保持自己的陣列行爲,通過添加數組索引的名稱,例如:

<?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我的用例僅用於1d數組,我從未測試過或嘗試過使用2d數組 - 對不起,我不能幫助你進一步。如果您找到解決方案,請隨時發佈另一個答案:) – jammypeach