Не работает валидация через 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, время: 00:10. |