Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка полей input и select на обязательность функция Jquery find() (https://javascript.ru/forum/misc/64286-proverka-polejj-input-i-select-na-obyazatelnost-funkciya-jquery-find.html)

mxup 01.08.2016 11:17

Проверка полей input и select на обязательность функция Jquery find()
 
Здравствуйте, есть функция проверяющая заполнены ли обязательные поля формы или нет. Так вот она по умолчанию проверяет только поля типа input
$(this).find('input[type="text"]').each(function () {
            if ($(this).val() == '' && $(this).attr('aria-required')) {

                $(this).addClass('badfields');
		 flag = false;
            } else {
                $(this).removeClass('badfields');
            }
        }

Хотел бы ещё добавить проверку обязательную полей типа select

Я чуть изменил параметры функции find и сделал так:
$(this).find('input[type="text"], select').each(function () {
            if ($(this).val() == '' && $(this).attr('aria-required')) {

                $(this).addClass('badfields');
		  flag = false;
            } else {
                $(this).removeClass('badfields');
            }
        }


То есть добавил в параметры функции select

Вопросы первый: правильно ли я добавил параметр select ?

Вопрос второй: при проверке заполнено ли поле или нет участвует функция val() . С полями Input то всё понятно. Здесь если пустая строка, то поле не заполнено. А вот как быть с select? У меня просто по умолчанию в поле Select стоит значение "Выберите цвет" и далее при нажатии на селект список вариантов (например красный, зелёный, синий и т.п.). Есть и второй селект, в котором стоит по умолчанию значение "Выберите материал" и значения (дерево, металл и т.д.) Мне вот со своими скудными знаниями функций и операторов Javascript приходит в голову делать только такую проверку:

$(this).find('input[type="text"], select').each(function () {
            if ($(this).val() == '' || $(this).val() == 'Выберите цвет' || $(this).val() == 'Выберите материал' && $(this).attr('aria-required')) {

                $(this).addClass('badfields');
		  flag = false;
            } else {
                $(this).removeClass('badfields');
            }
        }


Но это тоже не срабатывает, так как почему то все полям в форме добавляется класс badfield. Я так подозревая, что в логических операторах и их приоритете у меня что то неправильно (я имею ввиду ||, &&). Подскажите пожалуйста как бы сделать правильно?

mxup 01.08.2016 11:24

Проблему решил, объеденил выражения оператора OR (||) в скобочки)
$(this).find('input[type="text"], select').each(function () {
            if (($(this).val() == '' || $(this).val() == 'Выберите цвет' || $(this).val() == 'Выберите материал') && $(this).attr('aria-required')) {

                $(this).addClass('badfields');
		  flag = false;
            } else {
                $(this).removeClass('badfields');
            }
        }

рони 01.08.2016 11:26

Цитата:

Сообщение от mxup
if ()$(this).val()

:blink:

mxup 01.08.2016 11:43

да я поправил уже)

warren buffet 02.08.2016 05:28

Цитата:

Сообщение от mxup
$(this).val() == 'Выберите цвет'

Одуреть.

Проверяй .selectedIndex на > 0. Твой "Выберите цвет" в первой позиции, значит его индекс == 0. Индексы всех остальных опций > 0. Все просто.

warren buffet 02.08.2016 05:32

Цитата:

($(this).val() == ''
Тоже не фак, набил пробелов с переносами и табами и вообще и будет тебе пустое поле. .trim() делай хотя бы.


Часовой пояс GMT +3, время: 09:12.