Показать сообщение отдельно
  #1 (permalink)  
Старый 01.08.2016, 11:17
Аспирант
Отправить личное сообщение для mxup Посмотреть профиль Найти все сообщения от mxup
 
Регистрация: 18.06.2015
Сообщений: 38

Проверка полей 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. Я так подозревая, что в логических операторах и их приоритете у меня что то неправильно (я имею ввиду ||, &&). Подскажите пожалуйста как бы сделать правильно?
Ответить с цитированием