2015-10-09 126 views
0

這是我在這裏問的第一個問題。 我有一個fieldset內有4個輸入。如果完成4箇中的至少2個,我想驗證表單。我可以通過$("#communications input").val()獲得第一個輸入的值。獲取字段集中所有jQuery輸入的值

<fieldset class="input-group-fieldset bigger-labels" id="communications"> 
    <div class="row"> 
     <div class="columns twelve"> 
      <div class="input-group" id="pref-mail-wrap"> 
       <label>Email Address</label> 
       @Html.TextBoxFor(model => model.PrefferedEmail, new { @class = "contact-group" }) 

      </div> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="columns four"> 
      <div class="input-group" id="pref-phone-wrap"> 
       <label>Telephone No</label> 
       @Html.TextBoxFor(model => model.PrefferedPhoneNo, new { @class = "contact-group" }) 



      </div> 
     </div> 
     <div class="columns four"> 
      <div class="input-group" id="pref-sms-wrap"> 
       <label>SMS No</label> 
       @Html.TextBoxFor(model => model.PrefferedSmsNo, new { @class = "contact-group" }) 

      </div> 
     </div> 
    </div> 
    <div class="" id="pref-address-wrap"> 

     <div class="row fixed-width"> 
      <div class="columns twelve"> 
       <div class="input-group2"> 
        <label>Address </label> 

        @Html.TextBoxFor(model => model.PostalAddress) 

       </div> 
      </div> 

     </div> 

先謝謝您, Kostas。

回答

1

如下使用.filter()

var $completedInputs = $("#communications input:text").filter(function() { 
    //return the ones witn non-empty values 
    return $.trim(this.value) != ""; 
}); 

if ($completedInputs.length >= 2) { 
    //At least 2 inputs have been filled. 
} 

$("#communications input:text")$("#communications :text") =>所有的輸入,其類型爲文本

$("#communications input") =>所有的輸入

+0

謝謝。這實際上幫了我很多。 – karva

0

您可以使用jQuery的每個()的返回選擇更多然後1個元素:

​​
+0

謝謝。這很有幫助。 – karva

0

嘗試這樣的事情。

var count = 0; 
$('#communications input').each(function(index, item) { 
    if($(item).val()!=="") { 
     count ++; 
    } 
    return count <= 2; // break; if more than 2 have values 
    }); 

if(count >= 2) { 
    //valid 
} 

更多詳情: https://api.jquery.com/each/

+0

感謝您的快速回復。 – karva

0

您可以使用filter()檢查多少inputs都被賦予了值。試試這個:

var validInputs = $("#communications input").filter(function() { 
    return !$(this).val().trim() == ''; 
}).length; 

if (validInputs < 2) { 
    // form is invalid... 
} 
+0

謝謝。你的回答也很有幫助:) – karva

0

如果所有的輸入具有相同的格式和驗證是一樣的 嘗試內fieldset

$("#communications input").each(function(i,v){ 

}); 

通過全部投入到迭代否則,你應該單獨確認4個輸入。

+0

我已經設置了我的驗證。比方說,您將電子郵件字段留空。當你按下回車鍵時,會有一條消息告訴你完成它。我只是想讓你完成電子郵件領域和另外一個。這是我無法管理的部分!感謝您的答覆。 – karva

+0

你可以使用jQuery的'validation'插件http://jqueryvalidation.org/files/demo/ – anmarti

+0

我使用這個插件來驗證我的表單。我現在試圖創建一個自定義規則,以驗證具有8個字段的表單。 – karva

1

您應該爲所有這些元素input屬性name,則它們序列化,並使用檢查:

if($('#communications :input').serializeArray().length >=2) 

'#communications input'就足以在你的情況

+0

謝謝你的快速回答。我所有的輸入都有一個名字。當我使用您提供給我的代碼時,無論有多少輸入爲空或不輸入,它都會返回true。 – karva

+0

@KostasArva它不會序列化輸入沒有價值,簡單的例子複製您的問題或至少在瀏覽器中呈現的HTML標記。也許你有其他類型的':input',不僅是文本框,然後嘗試:'$('#communications:text')。serializeArray().length'。請注意,文本框中的任何空白區域都會影響表單HTML5驗證,但這可能也是您的問題,但我對此持懷疑態度 –

+0

至少我已經弄明白了。感謝您的答覆。 – karva