2015-10-09 3 views
0

это первый вопрос, который я задаю здесь. У меня есть набор полей, который имеет внутри 4 входа. Я хочу проверить форму, если по крайней мере 2 из 4 завершены. Я могу получить значение первого ввода с $("#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> 

Спасибо заранее, Костаса.

ответ

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 элементы:

$("#communications input").each(function(){ 
    // $(this).val(); check here what you want. 
}) 
+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

У меня уже были установлены мои проверки. Скажем, например, что вы оставили поле электронной почты пустым. Когда вы нажмете enter, появится сообщение с сообщением о его завершении. Я просто хотел, чтобы вы заполнили поле электронной почты и еще одно. Это была та часть, которой я не мог справиться! Благодарю за ваш ответ. – karva

+0

Вы можете использовать плагин jQuery 'validation' http://jqueryvalidation.org/files/demo/ – anmarti

+0

Я использую этот плагин для проверки моей формы. Теперь я пытаюсь создать собственное правило для проверки формы с 8 полями. – karva

1

Вы должны установить name атрибут для всех этих input элементов, а затем сериализации их и проверить его с помощью:

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

'#communications input' будет достаточно в вашем случае

+0

Благодарим вас за быстрый ответ. У всех моих входов есть имя. Когда я использую код, который вы мне предоставили, он возвращает true независимо от того, сколько входных данных пуст или нет. – karva

+0

@KostasArva Он не будет сериализовать ввод без значения, после минималистического образца, реплицирующего вашу проблему, или, по крайней мере, визуализированную HTML-разметку в браузере. Возможно, у вас есть другой тип ': input', а не только текстовое поле, а затем попробуйте:' $ ('# communication: text'). SerializeArray(). Length'.Имейте в виду, любое свободное пространство в текстовом поле делает его действительным в отношении проверки HTML5 формы, это может быть ваша проблема, но я сомневаюсь в этом –

+0

По крайней мере, я понял это. Благодарю за ваш ответ. – karva

Смежные вопросы