2017-02-22 1 views
1

Эти поля создаются с помощью JQuery.Как проверить формы JQuery, которые имеют несколько имен [] массивов?

Как проверить массив полей «aname []» (вы должны заполнить их перед тем, как перейти к следующему шагу)?

JQuery в HTML:

input ="<input name='aname[]' id='1' placeholder='yourname1' type='text' required />"; 
input +="<input name='aname[]' id='2' placeholder='yourname2' type='text' required />"; 
input +="<input name='aname[]' id='3' placeholder='yourname3' type='text' required />"; 
$(".placeholder").append(input); 

команда JQuery, чтобы попытаться получить вход

$(document).ready(function() { 
    var items = $('input[name="items[]"]').text(); 
    if(items == ""){ 
     alert("fill this field"); 
    } 
}); 

ответ

2

Два вопроса:

  1. text() извлекает текст элемента (например, в span или div), а не значение ввода. Чтобы получить значение ввода, используйте val. (Или, если вы просто работаете с элементом DOM, value.)

  2. Вам необходимо запустить проверку в ответ на событие, а не только на загрузку страницы.

  3. Если изменить text() к val() в этом коде, вы будете проверять только значение первого (один text() немного странно и работает по-разному в val() и большинстве других добытчиков Jquery).

Так что, если вы хотите, чтобы убедиться, что все из них заполнены, вы будете нуждаться в обработчик события и цикл некоторого вида:

$(document).ready(function() { 
    $("selector-for-the-form").on("submit", function(e) { 
     $(this).find('input[name="items[]"]').each(function() { 
      if (this.value == "") { 
       this.focus();    // So the user knows which field... 
       alert("fill this field"); // ...although this may mess that up 
       e.preventDefault();  // Prevent form submission 
       return false;    // Stop looping 
      } 
     }); 
    }); 
}); 

Конечно, alert ISN» t обычно самый большой пользовательский опыт для такого рода вещей. Обычно приятнее, если вы проактивно проверяете и уведомляете, что не мешает пользователю и прерывает то, что они делают, пока вам не понадобится (например, изменение цвета границы ввода и/или отображение встроенного сообщения). (Есть также много плагинов, которые помогут вам в этом.)

+0

Я просто использовал alert() для тестов. Большую часть времени я использую toastr. Мне было интересно, если я буду использовать., Но не был уверен, как до твоего объяснения. Отличная информация :) – Sol

+1

Нужно ли нам делать e.preventDefault(); ? Это остановит форму submit. – Sol

+1

@ user7480839: Doh! Да. Вот почему я объявил параметр 'e', но я забыл добавить звонок! Я добавил его сейчас, а также 'return false;' в 'each', чтобы остановить цикл, когда мы находим первое проблемное поле. (Что вы можете или не хотите, если используете toastr.) –

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