Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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. Я так подозревая, что в логических операторах и их приоритете у меня что то неправильно (я имею ввиду ||, &&). Подскажите пожалуйста как бы сделать правильно?
Ответить с цитированием
  #2 (permalink)  
Старый 01.08.2016, 11:24
Аспирант
Отправить личное сообщение для mxup Посмотреть профиль Найти все сообщения от mxup
 
Регистрация: 18.06.2015
Сообщений: 38

Проблему решил, объеденил выражения оператора 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');
            }
        }
Ответить с цитированием
  #3 (permalink)  
Старый 01.08.2016, 11:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от mxup
if ()$(this).val()
Ответить с цитированием
  #4 (permalink)  
Старый 01.08.2016, 11:43
Аспирант
Отправить личное сообщение для mxup Посмотреть профиль Найти все сообщения от mxup
 
Регистрация: 18.06.2015
Сообщений: 38

да я поправил уже)
Ответить с цитированием
  #5 (permalink)  
Старый 02.08.2016, 05:28
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

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

Проверяй .selectedIndex на > 0. Твой "Выберите цвет" в первой позиции, значит его индекс == 0. Индексы всех остальных опций > 0. Все просто.
Ответить с цитированием
  #6 (permalink)  
Старый 02.08.2016, 05:32
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема совместного использования Masked Input и jQuery Validation spo jQuery 41 13.04.2016 16:10
jquery для placeholder работает только для первого input в ie Nailya jQuery 1 13.05.2014 09:57
jquery select: name, selected jk888 jQuery 12 12.11.2013 16:25
Функция в jQuery и this Valdemor jQuery 7 16.06.2012 20:36
jQuery - объект или функция? jazzz13 jQuery 8 16.08.2011 04:01