Не работает валидация через 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: //заносим в базу данных |
видимо switch вам тут не поможет.
Второй блок выполняется, потому что в первом нету ключевого слова break. Если его поставить, то второй блок не выполнится, если выполнится первый. Думаю проще ченить типа if (document.getElementById("editor-area").value == '') { noty.push('Бла бла'); } if (...) { noty.push(..); } .. |
Или чтобы упростить код, можно хранить id полей и соответсвующие тексты ошибок в массиве. Ну и цикл для итерации по нему.
|
Придётся делать через if. Просто удивило такое поведение. Ведь если title-area пуст, а editor-area заполнен, то case 1 не должен исполняться (в отличии от того, что происходит). Но если оба пусты, то блогодаря отсутствию break, для каждого случая выведется уведомление.
|
Цитата:
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 варианта и код при их совпадении (+ код при первом совпадении). Так что все логично я думаю. |
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 тоже удобнее заготовить заранее Код получается модульный, читабельный и достаточно короткий |
Часовой пояс GMT +3, время: 12:25. |