Вход

Просмотр полной версии : Не работает валидация через switch/case


iHun
03.02.2013, 08:45
Нужно сделать, чтобы если не заполнено поле заголовка (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:
//заносим в базу данных

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

Думаю проще ченить типа
if (document.getElementById("editor-area").value == '') {
noty.push('Бла бла');
}
if (...) {
noty.push(..);
}
..

danik.js
03.02.2013, 09:42
Или чтобы упростить код, можно хранить id полей и соответсвующие тексты ошибок в массиве. Ну и цикл для итерации по нему.

iHun
03.02.2013, 12:13
Придётся делать через if. Просто удивило такое поведение. Ведь если title-area пуст, а editor-area заполнен, то case 1 не должен исполняться (в отличии от того, что происходит). Но если оба пусты, то блогодаря отсутствию break, для каждого случая выведется уведомление.

danik.js
03.02.2013, 12:28
Ведь если 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 варианта и код при их совпадении (+ код при первом совпадении). Так что все логично я думаю.

Deff
03.02.2013, 12:38
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 тоже удобнее заготовить заранее

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