2012-01-27 86 views
10

我使用具有相同名稱但具有相似(增量)ID的輸入的此表單。jQuery驗證具有相同名稱的多個字段

我希望表單驗證,如果有上者的姓名,年齡必須是強制性..

現在會發生什麼情況是,只有第一個輸入是強制性的。

這裏是我的代碼:

<html lang="en"> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script> 
</head> 
<body> 
    <form id="people"> 
     <div class="section"> 
      <input id="person1" name="person" class="person" type="text" placeholder="First Name" /> 
      <input id="age1" name="age" class="age" type="text" placeholder="Age" /> 
     </div> 
     <div class="section"> 
      <input id="person2" name="person" class="person" type="text" placeholder="First Name" /> 
      <input id="age2" name="age" class="age" type="text" placeholder="Age" /> 
     </div> 
     <div class="section"> 
      <input id="person3" name="person" class="person" type="text" placeholder="First Name" /> 
      <input id="age3" name="age" class="age" type="text" placeholder="Age" /> 
     </div> 
     ... 
     <input type="submit" id="submit" name="submit" value="Add" /> 
    </form> 
    <script type="text/javascript"> 
     $(function(){ 
      $('#people').validate(); 
      $('#submit').click(function(){ 
       $('[id^="person"]').each(function(){ 
        if ($(this).val().length>0){ 
         //alert($(this).val()); 
         //alert($(this).parent().find('.age').val()); 
         $(this).rules('add', { 
          required: true, 
          minlength: 2, 
          messages: { 
           required: "Specify the person name", 
           minlength: "Minimum of 2 characters" 
          } 
         }); 
         $(this).parent().find('.age').rules('add', { 
          required: true, 
          number: true, 
          messages: { 
           required: "Must have an age", 
           number: "Specify a valid age" 
          } 
         }); 
        } 
       }); 
      }); 
     }); 
    </script> 
</body> 

+1

具有多個文本框同名可能是一個壞主意!? – 2012-01-27 12:23:34

+0

我在這裏找到了一些使用.each()函數的答案,但我無法使其工作..在將來我會有動態數量的「行」,所以我寧願有相同的名稱,所以我可以得到他們在服務器端更容易 – 2012-01-27 12:27:18

+4

@ stian.net - 重複輸入名稱沒有問題,實際上它是表格數據的非常標準的做法。在這種情況下確實不是造成困難的原因。 – nnnnnn 2012-01-27 12:34:14

回答

10

jQuery Validator插件不支持具有相同名稱的多個字段開箱即用。您需要編輯插件的源代碼以按照您想要的方式檢查字段。

請參閱this answer以解決相似的問題。

-5
<div class="section"> 
     <input id="person1" name="person[]" class="person" type="text" placeholder="First Name" /> 
     <input id="age1" name="age[]" class="age" type="text" placeholder="Age" /> 
    </div> 
    <div class="section"> 
     <input id="person2" name="person[]" class="person" type="text" placeholder="First Name" /> 
     <input id="age2" name="age[]" class="age" type="text" placeholder="Age" /> 
    </div> 
    <div class="section"> 
     <input id="person3" name="person[]" class="person" type="text" placeholder="First Name" /> 
     <input id="age3" name="age[]" class="age" type="text" placeholder="Age" /> 
    </div> 

你應該通過陣列添加方括號和循環。

+0

不能使它的工作方式 – 2012-01-27 12:42:44

+0

方括號數組方法只適用於PHP AFAIK – 2012-05-08 05:32:21

0

朋友們!

爲了驗證具有相同名稱的文本框使用以下它對我來說工作得很好。另外,不需要將輸入參數聲明爲數組。

這裏'minVal'是文本框的名稱。 同樣,下拉使用'document.getElementsByTagName(「select」);'

function validateMinimumVal(){ 
    inp = document.getElementsByTagName("TEXT"); 
    for (var i = 0; i < inp.length; ++i) { 
     if (inp[i].name =="minVal" && inp[i].value==''){ 
      alert('plesae Add a MINIMUM VALUE!!'); 
       return false; 
      } 
     } 
    return true; 
} 

希望這有助於! Jagan

相關問題