Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.02.2013, 08:45
Новичок на форуме
Отправить личное сообщение для iHun Посмотреть профиль Найти все сообщения от iHun
 
Регистрация: 16.02.2012
Сообщений: 7

Не работает валидация через switch/case
Нужно сделать, чтобы если не заполнено поле заголовка (title-area) или записи (editor-area), то выводилось бы уведомление об этом. И наконец если не заполнено ни то, ни то, должны появиться два соответствующих уведомления.
Проблема в том, что в случае, если введён основной текст (editor-area) и не введён заголовок, все равно выводятся оба уведомления (в том числе и о том, что основное поле пусто).
Как правильно настроить валидацию?
switch ("") {
        case document.getElementById("title-area").value: {
          noty({
            text: 'Введите название записи',
          });
        }// в случае, если поле пустое, выводим сообщение, но break не ставим и проверяем дальше.
        
        case document.getElementById("editor-area").value: {
          noty({
            text: 'Введите текст записи',
          });
          break;
        }//почему-то вышележащий блок выполняется даже если поле не пустое
        default:
//заносим в базу данных
Ответить с цитированием
  #2 (permalink)  
Старый 03.02.2013, 09:37
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

видимо switch вам тут не поможет.
Второй блок выполняется, потому что в первом нету ключевого слова break. Если его поставить, то второй блок не выполнится, если выполнится первый.

Думаю проще ченить типа
if (document.getElementById("editor-area").value == '') {
  noty.push('Бла бла');
}
if (...) {
  noty.push(..);
}
..
Ответить с цитированием
  #3 (permalink)  
Старый 03.02.2013, 09:42
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Или чтобы упростить код, можно хранить id полей и соответсвующие тексты ошибок в массиве. Ну и цикл для итерации по нему.
Ответить с цитированием
  #4 (permalink)  
Старый 03.02.2013, 12:13
Новичок на форуме
Отправить личное сообщение для iHun Посмотреть профиль Найти все сообщения от iHun
 
Регистрация: 16.02.2012
Сообщений: 7

Придётся делать через if. Просто удивило такое поведение. Ведь если title-area пуст, а editor-area заполнен, то case 1 не должен исполняться (в отличии от того, что происходит). Но если оба пусты, то блогодаря отсутствию break, для каждого случая выведется уведомление.
Ответить с цитированием
  #5 (permalink)  
Старый 03.02.2013, 12:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от iHun
Ведь если title-area пуст, а editor-area заполнен, то case 1 не должен исполняться
Вы нумеруете с нуля в данном случае?
case 0 выполнится если title пуст.
case 1 выполнится если title пуст, либо editor пуст.

Вас же не смущает это:

switch ( 1 )
{
    case 0:
    case 1:
        alert('number');
        break;
    case 'x':
    case 'y':
        alert('letter');
        break;
}


Тоесть мы перечисляем возможные группы вариантов, разделяя их через break.
Теперь взгляните на свой код. Вы перечислили 2 варианта и код при их совпадении (+ код при первом совпадении). Так что все логично я думаю.
Ответить с цитированием
  #6 (permalink)  
Старый 03.02.2013, 12:38
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

iHun,
Удобнее занести все данные в массив аrrValue=[]

Затем преобразовать в строку и проанализировать регуляркой:
var boundary = '=!!!16!!!=';
var rega = new Regexp("([\\s\\S]*)"+boundary+"|$","img")
str=аrrValue.join(boundary).replace(rega,''+1*("$1"!==''));
Получим ключ для анализа вида (101100) // Где нули - пустые значения данных
Анализируем ключ и Выводим сообщения соответствующих ошибок
if(str.substr(5,1)&&str.substr(6,1)){alert("....
*Массив сообщений для alert тоже удобнее заготовить заранее

Код получается модульный, читабельный и достаточно короткий

Последний раз редактировалось Deff, 03.02.2013 в 13:48.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает передача через POST OklickSpb Общие вопросы Javascript 3 31.03.2012 01:43
кеширование HTML переданого через ajax BorisBritva jQuery 6 02.04.2011 01:23
Не корректно работает Submit() через JS Oparin Элементы интерфейса 8 30.03.2011 16:20
ссылка с fadeIn работает через раз oblomov86 jQuery 1 24.03.2011 17:52
XMLHTTPRequest передача имя через POST dds AJAX и COMET 0 14.08.2008 14:44