Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: glebushka от 08 Сентября 2002, 18:59:37

Название: и снова формы
Отправлено: glebushka от 08 Сентября 2002, 18:59:37
Описание проблемы:
Есть динамически генерируемая перл-скриптом форма, состоящая сугубо из групп радио и чекбуттонов (единственный и множественный выбор).
Количество групп заранее не известно.
Вариантов выбора в одной группе не больше пяти не меньше двух.
Как написать скрипт, проверяющий простое заполнение всех групп (в каждой группе должна быть выбрана хоть одна позиция).
Вообще я сейчас пишу, верне уже написал, перл-скрипт-тестирование. А ява-скрипт нужен для того, чтобы избавить тестируемых от обидных ошибок.
Т.е. сам яваскрипт может тоже генерироваться в зависимости от колличества групп!
Я попробывал сам написать, чего то не получилось:-). Совсем не получилось. Думал позаимствовать:-))). Никого эта трабл не мучила: смотрел большие анкеты, там везде, где есть радио или чек-бутоны, уже по умолчанию выбраны хоть какие нибудь значения, и соответственно проверка по их заполнению не производится.
Помогите плиз.
Название: и снова формы
Отправлено: USE от 08 Сентября 2002, 19:57:12
Цитировать
уже по умолчанию выбраны хоть какие нибудь значения, и соответственно проверка по их заполнению не производится


вообще-то так должно быть, как говорят специ по юзабилити. потому что неопытные могут не поянть, что надо проставлять галочки и т.п.
Название: и снова формы
Отправлено: glebushka от 08 Сентября 2002, 20:03:24
Цитировать
вообще-то так должно быть, как говорят специ по юзабилити. потому что неопытные могут не поянть, что надо проставлять галочки и т.п.

USE, ты наверное не прочитал для чего мне это нужно,  Дело в том, что вопросов в среднем, в тесте будет штук 30, по итогам выставляется отметка. И плевать на юзабилити, если из-за неё эта отметка будет ниже.
Человек, отвечая на вопросы некоторые пропускает, оставляя (на потом), задача - ЯваСкрипта: напомнить юзеру, если он где-нибуджь не дал ответ, а не обманывать его неправильно расставленными флажками.
Название: и снова формы
Отправлено: glebushka от 08 Сентября 2002, 20:05:59
Кстати вот сырой вариант перл-скрипта:
http://www.glebushka.hut.ru/cgi-bin/test/test.cgi
ID: gleb
ФИО: всё что угодно, пока проверка не производится.
Это очень упрощённый вариант вопросов всего два (да и в базе их пять:-). Ограничение по времени 3 минуты.
Помогите плиз, оч.надо!
Название: и снова формы
Отправлено: aleandr от 09 Сентября 2002, 15:01:43
Все равно же id radio-элемента ты даешь в цикле Перла.
Сделай массив в JS, равный числу id cо значением "0". При выборе radio-элемента изменяешь значение этого же элемента массива.
Ну а потом по SUBMIT через RegExp одной строчкой делаешь из массива строку и ищешь есть ли вхождение нуля.
Название: и снова формы
Отправлено: aleandr от 09 Сентября 2002, 15:07:09
Ну а если есть - событие SUBMIT отменяешь и говоришь какая группа не заполнена...
Название: и снова формы
Отправлено: aleandr от 09 Сентября 2002, 15:10:16
.
Название: и снова формы
Отправлено: glebushka от 09 Сентября 2002, 16:35:26
Да вообще я в яваскрипт мало что понимаю...
Вот форма:

Вопрос 1:




Вопрос 2:








Создаю массивы:
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
Название: и снова формы
Отправлено: aleandr от 09 Сентября 2002, 16:46:32
Ну код твой переделаем, но завтра!
Сейчас бегууууууу домой ;-)))
Завтра в 8.00 будет, а можа кто-нить раньше тебя поправит/поможет...
Название: и снова формы
Отправлено: glebushka от 10 Сентября 2002, 00:01:12
aleandr, так никто и не помог, жду 8.00:-)
Название: и снова формы
Отправлено: aleandr от 10 Сентября 2002, 08:12:06
Вот рабочий кусок в Перл.
Для каждого вопроса - один ответ.
Сделай без цикла или двойной, чтобы было больше вариантов ответов.
Также в массив arr можно сразу value выбранного элемента писать, а потом при SUBMIT присвоить этот массив какому-нить HIDDEN.


print <

EOF
foreach $i(1..5) {
  print <  Вопрос №$i
 

 
EOF
}
print <

EOF
Название: и снова формы
Отправлено: aleandr от 10 Сентября 2002, 08:26:21
Вот почти такой же без Перла - этот точно работает ;-))



1

2

3



1

2



1

2

3

4




Название: и снова формы
Отправлено: glebushka от 11 Сентября 2002, 00:39:44
СПАСИБО!!!
Второй вариант работает:-)
Первый не пробовал:-)
Сейчас спать хочется, уже третьи сутки пошли, а я спал часов 6:-). Завтра займусь внедрением в скрипт...
Название: и снова формы
Отправлено: glebushka от 23 Сентября 2002, 00:11:59
ещё трабл.
а как отследить событие, если юзверь поставил галочку (в массиве значения изменились, затем решил вдруг убрать галочку (значения в массиве, в данном варианте скрипта НЕ ИЗМЕНИЛИСЬ!!!), а заново поставить забыл?
Название: и снова формы
Отправлено: Макс от 23 Сентября 2002, 02:00:30
примерно так:
onclick = "someFunc(this, 1)"

....
function someFunc(obj, pos) {
if (obj.checked == true) {
arr[pos] = obj.value;
} else {
arr[pos] = 0;
}
}