#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-разметкой:
- В HTML добавьте
required
класс CSS ко всем необходимым элементам. - В 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 — см. Редактирование — я думал об этом, и я думаю, что метод, который я описал выше, предпочтительнее.