Да уж. Не могу сказать, что я хорошо разбираюсь в JavaScript (хотя знаком с ним), но как мне кажется что код не самый лучший.
Например этот кусок
| Код |
parent.QuestField.document.writeln('<TR>'); parent.QuestField.document.writeln('<TD valign=top> <INPUT type="radio" name="R77" value="1"> </TD>'); parent.QuestField.document.writeln('<TD valign=top>'); parent.QuestField.document.writeln('<P>'); parent.QuestField.document.writeln('общедозволительного типа регулирования; <BR>'); parent.QuestField.document.writeln('</P>'); parent.QuestField.document.writeln('</TD>'); parent.QuestField.document.writeln('</TR>');
|
Можно было заменить одной строчкой (один раз вызвать функцию
parent.QuestField.document.writeln)
Или этот код (вроде бы это называется китайский код):
| Код |
if(QuestNumCheck==1){Check0();}
if(QuestNumCheck==2){Check1();}
if(QuestNumCheck==3){Check2();}
if(QuestNumCheck==4){Check3();}
if(QuestNumCheck==5){Check4();}
if(QuestNumCheck==6){Check5();}
if(QuestNumCheck==7){Check6();}
if(QuestNumCheck==8){Check7();}
if(QuestNumCheck==9){Check8();}
if(QuestNumCheck==10){Check9();}
if(QuestNumCheck==11){Check10();}
if(QuestNumCheck==12){Check11();}
if(QuestNumCheck==13){Check12();}
if(QuestNumCheck==14){Check13();}
if(QuestNumCheck==15){Check14();}
if(QuestNumCheck==16){Check15();}
if(QuestNumCheck==17){Check16();}
if(QuestNumCheck==18){Check17();}
if(QuestNumCheck==19){Check18();}
if(QuestNumCheck==20){Check19();}
if(QuestNumCheck==21){Check20();}
if(QuestNumCheck==22){Check21();}
if(QuestNumCheck==23){Check22();}
if(QuestNumCheck==24){Check23();}
if(QuestNumCheck==25){Check24();}
if(QuestNumCheck==26){Check25();}
if(QuestNumCheck==27){Check26();}
if(QuestNumCheck==28){Check27();}
if(QuestNumCheck==29){Check28();}
if(QuestNumCheck==30){Check29();}
if(QuestNumCheck==31){Check30();}
if(QuestNumCheck==32){Check31();}
if(QuestNumCheck==33){Check32();}
if(QuestNumCheck==34){Check33();}
if(QuestNumCheck==35){Check34();}
if(QuestNumCheck==36){Check35();}
if(QuestNumCheck==37){Check36();}
if(QuestNumCheck==38){Check37();}
if(QuestNumCheck==39){Check38();}
if(QuestNumCheck==40){Check39();}
if(QuestNumCheck==41){Check40();}
if(QuestNumCheck==42){Check41();}
if(QuestNumCheck==43){Check42();}
if(QuestNumCheck==44){Check43();}
if(QuestNumCheck==45){Check44();}
if(QuestNumCheck==46){Check45();}
if(QuestNumCheck==47){Check46();}
if(QuestNumCheck==48){Check47();}
if(QuestNumCheck==49){Check48();}
if(QuestNumCheck==50){Check49();}
if(QuestNumCheck==51){Check50();}
if(QuestNumCheck==52){Check51();}
if(QuestNumCheck==53){Check52();}
if(QuestNumCheck==54){Check53();}
if(QuestNumCheck==55){Check54();}
if(QuestNumCheck==56){Check55();}
if(QuestNumCheck==57){Check56();}
if(QuestNumCheck==58){Check57();}
if(QuestNumCheck==59){Check58();}
if(QuestNumCheck==60){Check59();}
if(QuestNumCheck==61){Check60();}
if(QuestNumCheck==62){Check61();}
if(QuestNumCheck==63){Check62();}
if(QuestNumCheck==64){Check63();}
if(QuestNumCheck==65){Check64();}
if(QuestNumCheck==66){Check65();}
if(QuestNumCheck==67){Check66();}
if(QuestNumCheck==68){Check67();}
if(QuestNumCheck==69){Check68();}
if(QuestNumCheck==70){Check69();}
if(QuestNumCheck==71){Check70();}
if(QuestNumCheck==72){Check71();}
if(QuestNumCheck==73){Check72();}
if(QuestNumCheck==74){Check73();}
if(QuestNumCheck==75){Check74();}
if(QuestNumCheck==76){Check75();}
if(QuestNumCheck==77){Check76();}
if(QuestNumCheck==78){Check77();}
if(QuestNumCheck==79){Check78();}
if(QuestNumCheck==80){Check79();}
if(QuestNumCheck==81){Check80();}
if(QuestNumCheck==82){Check81();}
if(QuestNumCheck==83){Check82();}
if(QuestNumCheck==84){Check83();}
if(QuestNumCheck==85){Check84();}
if(QuestNumCheck==86){Check85();}
if(QuestNumCheck==87){Check86();}
if(QuestNumCheck==88){Check87();}
if(QuestNumCheck==89){Check88();}
if(QuestNumCheck==90){Check89();}
if(QuestNumCheck==91){Check90();}
if(QuestNumCheck==92){Check91();}
if(QuestNumCheck==93){Check92();}
if(QuestNumCheck==94){Check93();}
if(QuestNumCheck==95){Check94();}
if(QuestNumCheck==96){Check95();}
if(QuestNumCheck==97){Check96();}
if(QuestNumCheck==98){Check97();}
if(QuestNumCheck==99){Check98();}
if(QuestNumCheck==100){Check99();}
if(QuestNumCheck==101){Check100();}
if(QuestNumCheck==102){Check101();}
if(QuestNumCheck==103){Check102();}
if(QuestNumCheck==104){Check103();}
if(QuestNumCheck==105){Check104();}
if(QuestNumCheck==106){Check105();}
if(QuestNumCheck==107){Check106();}
if(QuestNumCheck==108){Check107();}
if(QuestNumCheck==109){Check108();}
if(QuestNumCheck==110){Check109();}
if(QuestNumCheck==111){Check110();}
if(QuestNumCheck==112){Check111();}
if(QuestNumCheck==113){Check112();}
if(QuestNumCheck==114){Check113();}
if(QuestNumCheck==115){Check114();}
if(QuestNumCheck==116){Check115();}
if(QuestNumCheck==117){Check116();}
if(QuestNumCheck==118){Check117();}
if(QuestNumCheck==119){Check118();}
if(QuestNumCheck==120){Check119();}
|
Во-первых можно было бы создать массив функций. Но если это никак нельзя, то весь этот код можно заменить на:
| Код |
window['Check' + --QuestNumCheck]();
|
Или на абсолютно эдентичный:
| Код |
if (QuestNumCheck >= 1 && QuestNumCheck <= 120) window['Check' + --QuestNumCheck]();
|
Хотя может это оптимизация по времени...
Теперь непосредственно по вопросу: как понять где правильные ответы.
Обычно такого рода тесты создают так, что клиентская часть ПО отвечает только за интерфейс и за то, что-бы "упаковать" ответы и переслать их серверу, а затем от сервера получить результат. Т.е. правильные ответы знает только сервер.
Но в данном случае проверка производится на клиентской части, а значит найти все правильные ответы можно

Как это делать:
Допустим вам выпал вопрос "Укажите признаки юридической ответственности" (этот вопрос вы отобразили в вашем втором примере кода)
- 1. Вы смотрте исходный код http://www.usla.ru/Lemon/Test/TGP1036/NextQuest.jsc например в IE и в меню Правка - Найти на этой странице по названию вопроса находите те функции, которые отвечают за его вывод и проверку. (Вы их и разместили во втором примере кода в своем посте)
- 2. Дальше вы обращаете внимание на строчку
if(N==42)
в функции Check76. В этом (76-ом) вопросе в этой строке стоит число 42. Именно это число содержит ответ! - 3. Открываете калькулятор, ставите инжинерный вид. Вводите число 42, затем нажимаете "Bin" и число переводится в двоичную систему исчисления и на экране выводится 101010. Теперь определяем на каких местах стоят единицы, если считать с права на лево. В данном случае единицы стоят на местах 2, 4 и 6. Намера правильных ответов получаем уменьшив на 1 значение мест, где есть единицы. Т.е. правильные ответы - 1, 3, и 5. Потом на калькуляторе нажимаем "Dec", что-бы повторить операцию в дальнейшем для другого вопроса (ввести другое десятичное число).
- 4. Когда вы будете тестироваться, варинты ответов скрипт дает в случайном порядке (1-ый, 3-ий и 5-ый ответы не будут отображены 1-ым, 3-им и 5-ым). Нужно соотнести полученные в прошлом шаге номера и ответы. В функции Quest76() находи строку
parent.QuestField.document.writeln('<TD valign=top> <INPUT type="checkbox" name="C76_1" value="1"> </TD>');
здесь написано value="1", т.е. это первый вариант ответа, а его формултровка указана 2 строчками ниже:
parent.QuestField.document.writeln('это мера государственно-правового принуждения; <BR>');
Один правильный ответ уже найден (это мера государственно-правового принуждения), другие (3-ий и 5-ый) находятся также.
Итак, правильные ответы на вопрос "Укажите признаки юридической ответственности": это мера государственно-правового принуждения, это реализация санкций карательных норм, 'это необходимое последствие совершённого правонарушения.
Таким образом работают с вопросами, где нужно выбрать один правильный ответ из предложенных или несколько. Есть ещё вопросы, где нужно напечатать правильный ответ (напр. 118)
| Код |
function Quest118() { parent.QuestField.document.writeln('<P>'); parent.QuestField.document.writeln('Деятельность по анализу фактических обстоятельств, требующих правового разрешения, и выбор нормы права, предусматривающей эти обстоятельства называется: <BR>'); parent.QuestField.document.writeln('</P>'); parent.QuestField.document.writeln('<INPUT type="Text" size=70 name=" T118" value=""><br>'); parent.QuestField.document.forms[0].elements[0].focus();}
function Check118(){ var i; var Flag=0; var InputStr=parent.QuestField.document.forms[0].elements[0].value; var AnsPat=new Array(); AnsPat[0]="юридическ* квалификац* "; for(i=0;i<AnsPat.length;i++) { if(StrCompare(InputStr,AnsPat[i])) { Flag=1;} } Ans=Ans+"118="+InputStr+"|"; if(Flag) { QR=QR+1; } else { AddIQN(118);}}
|
Здесь всё ясно: первый шаг как в предыдущем алгоритме, а дальше:
находите строчку
AnsPat[0]="юридическ* квалификац* ";Она содержит ответ. Вы должны впечать что-то, где встречалось бы подстрока "юридическ" и "квалификац". Например "юридическая квалификация".
Это сообщение отредактировал(а) iff - 18.7.2011, 11:46