Исключить определенный div в глобальной проверке jQuery?

#javascript #jquery

#javascript #jquery

Вопрос:

Итак, у нас на нашей странице около 30 полей ввода, и вместо того, чтобы писать строку данных no для каждого из них, у нас есть простое утверждение:

 if( $(div).find('input:text[value=""]').length > 0 ||
    $('#checkbox1Wrap').find('input:checkbox:not(:checked)').length > 0 ||
    $('#checkbox2Wrap').find('input:checkbox:not(:checked)').length > 0 ||
    $(div).find('select option:first-child:selected').length > 0 ||
    $(div).find('textarea').val() == ""
){
    $(div).prepend('<p class="field_help"> Please complete all fields before moving to next step</p>');
    return false;
}
 

При этом проверяются все поля ввода, чтобы проверить, не превышает ли их длина 0, но мы хотим исключить проверку определенных полей.

Например:

 <input type="text" autocomplete="off" value="" name="ext" id="ext">
 

Мы не хотим, чтобы указанное выше поле ввода проверялось.

Как мы можем сделать так, чтобы оператор if пропускал определенные определенные идентификаторы?

Ответ №1:

Вы можете использовать .not() метод:

 $(div).find('input:text[value=""]').not('#id1, #id2')
 

Документы здесь: http://api.jquery.com/not /

Я должен отметить, что один стандартный способ сделать это немного проще, однако, если вы не возражаете против смешивания бизнес-логики формы с вашей HTML-разметкой:

  1. В HTML добавьте required класс CSS ко всем необходимым элементам.
  2. В jQuery укажите этот класс в своем селекторе:
     `$(div).find('input.required:text[value=""]')`
     

Теперь проверяются только требуемые элементы. У этого подхода есть несколько преимуществ:

  • Вы можете легко использовать CSS для визуального указания обязательных полей
  • Селекторы проще
  • Если вы решите, что вам нужна более сложная проверка, вы уже настроены на использование jquery-validation

Вы могли бы сделать то же самое в противоположном направлении, используя optional также класс, но я думаю required , что это немного лучше семантически.

Комментарии:

1. это звучит здорово, есть ли противоположность .not() ? Значит, мы можем применить его, если это ТАК? Если это имеет какой-то смысл?

2. Не уверен, что я понимаю. Если вы используете .not() , элементы, которые вы исключаете, не входят в набор, поэтому вам придется .add() возвращать их обратно впоследствии: .not('.general').add('#specific') перехватывает specific элемент, даже если у него есть general класс. Это то, что вы имеете в виду? В противном случае все элементы в вашем наборе будут принудительно применены, верно?

3. @Latox — см. Редактирование — я думал об этом, и я думаю, что метод, который я описал выше, предпочтительнее.