Forum Webscript.Ru
Программирование => JavaScript & JScript => Тема начата: glebushka от 08 Сентября 2002, 18:59:37
-
Описание проблемы:
Есть динамически генерируемая перл-скриптом форма, состоящая сугубо из групп радио и чекбуттонов (единственный и множественный выбор).
Количество групп заранее не известно.
Вариантов выбора в одной группе не больше пяти не меньше двух.
Как написать скрипт, проверяющий простое заполнение всех групп (в каждой группе должна быть выбрана хоть одна позиция).
Вообще я сейчас пишу, верне уже написал, перл-скрипт-тестирование. А ява-скрипт нужен для того, чтобы избавить тестируемых от обидных ошибок.
Т.е. сам яваскрипт может тоже генерироваться в зависимости от колличества групп!
Я попробывал сам написать, чего то не получилось:-). Совсем не получилось. Думал позаимствовать:-))). Никого эта трабл не мучила: смотрел большие анкеты, там везде, где есть радио или чек-бутоны, уже по умолчанию выбраны хоть какие нибудь значения, и соответственно проверка по их заполнению не производится.
Помогите плиз.
-
уже по умолчанию выбраны хоть какие нибудь значения, и соответственно проверка по их заполнению не производится
вообще-то так должно быть, как говорят специ по юзабилити. потому что неопытные могут не поянть, что надо проставлять галочки и т.п.
-
вообще-то так должно быть, как говорят специ по юзабилити. потому что неопытные могут не поянть, что надо проставлять галочки и т.п.
USE, ты наверное не прочитал для чего мне это нужно, Дело в том, что вопросов в среднем, в тесте будет штук 30, по итогам выставляется отметка. И плевать на юзабилити, если из-за неё эта отметка будет ниже.
Человек, отвечая на вопросы некоторые пропускает, оставляя (на потом), задача - ЯваСкрипта: напомнить юзеру, если он где-нибуджь не дал ответ, а не обманывать его неправильно расставленными флажками.
-
Кстати вот сырой вариант перл-скрипта:
http://www.glebushka.hut.ru/cgi-bin/test/test.cgi
ID: gleb
ФИО: всё что угодно, пока проверка не производится.
Это очень упрощённый вариант вопросов всего два (да и в базе их пять:-). Ограничение по времени 3 минуты.
Помогите плиз, оч.надо!
-
Все равно же id radio-элемента ты даешь в цикле Перла.
Сделай массив в JS, равный числу id cо значением "0". При выборе radio-элемента изменяешь значение этого же элемента массива.
Ну а потом по SUBMIT через RegExp одной строчкой делаешь из массива строку и ищешь есть ли вхождение нуля.
-
Ну а если есть - событие SUBMIT отменяешь и говоришь какая группа не заполнена...
-
.
-
Да вообще я в яваскрипт мало что понимаю...
Вот форма:
Создаю массивы:
spisok_id = = new Array("id1", "id2");
znacheniya_id = new Array("0", "0");
spisok_alertov= new Array("1", "2");
Есть функция, которая проверяет, есть ли нули в массиве znacheniya_id, и при первом же встреченном нуле выдат алерт-бокс (посмотри те верно ли она написана?)
function SendForm () {
var i, j;
for(j=0; jif (znacheniya_id[j] == 0) {
alert(\'Вы не ответели на \' + spisok_alertov[j] + \'вопрос!\');
return false;
}
}
return true;
}
Теперь у меня вопрос, каким образом изменять элементы в массиве znacheniya_id? Какое событие и как? Вероятно нужно создавать ещё одну функцию, и добавлять её вызов в форму, к каждому тегу input? Расскажите поподробнее:-), для тупых;-), плиZZZ
-
Ну код твой переделаем, но завтра!
Сейчас бегууууууу домой ;-)))
Завтра в 8.00 будет, а можа кто-нить раньше тебя поправит/поможет...
-
aleandr, так никто и не помог, жду 8.00:-)
-
Вот рабочий кусок в Перл.
Для каждого вопроса - один ответ.
Сделай без цикла или двойной, чтобы было больше вариантов ответов.
Также в массив arr можно сразу value выбранного элемента писать, а потом при SUBMIT присвоить этот массив какому-нить HIDDEN.
print <
EOF
-
Вот почти такой же без Перла - этот точно работает ;-))
-
СПАСИБО!!!
Второй вариант работает:-)
Первый не пробовал:-)
Сейчас спать хочется, уже третьи сутки пошли, а я спал часов 6:-). Завтра займусь внедрением в скрипт...
-
ещё трабл.
а как отследить событие, если юзверь поставил галочку (в массиве значения изменились, затем решил вдруг убрать галочку (значения в массиве, в данном варианте скрипта НЕ ИЗМЕНИЛИСЬ!!!), а заново поставить забыл?
-
примерно так:
onclick = "someFunc(this, 1)"
....
function someFunc(obj, pos) {
if (obj.checked == true) {
arr[pos] = obj.value;
} else {
arr[pos] = 0;
}
}