Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Тест с checkbox (https://javascript.ru/forum/misc/36066-test-s-checkbox.html)

Vasy 03.03.2013 06:10

Тест с checkbox
 
Задача была в том что бы написать тест с checkbox с несколькими вариантами овтетов , но как я не старалса этот код выбирает лиш 1 правильный ответ,тоесть несколько правильных вариантов в этом тесте быть неможет.Вот набросал код,подскажите что нужно исправить что-бы можно было ставить несколько правильных ответов а не один.
<html>

<head>

<SCRIPT LANGUAGE="JavaScript">
function checkForm() {
            var checkbox = document.getElementsByTagName('input');
            var ansver = false;
            for(var i=0;i!=checkbox.length;i++){
                if (checkbox[i].type == 'checkbox' && checkbox[i].checked)
                    ansver = checkbox[i].name == 'zara';
                   // ansver = checkbox[i].name == 'sokg';
            }
            if (ansver) {
                document.test.s1.
value="otvet pravilniy ";
                return true;
            } else {
               document.test.s1.
value="otvet ne veren ";
                return false;
            }
        }
</script>

</head>
<body>
<FORM name=test>
    <b>v koko?</b>
    <br><input type="checkbox" name="zara" value="yes">? kozel
    <input type="checkbox" name="sokg" value="yes">? orel
    <br><input type="checkbox" name="jas" value="yes">shenok
    <br><input type="checkbox" name="glu" value="yes">kot
    
       

<P><TEXTAREA name=s1 rows=4 cols=50> </TEXTAREA> </P><input type="button" name="t1" value="podtcerdit" onClick="checkForm();">
<INPUT type=reset value="Сбросить ответы"> 
</FORM>

</body>

</html>

danik.js 03.03.2013 07:09

<!DOCTYPE html>
<html> 
<head>
<script>
// правильные ответы - первый и третий
var answer = {1:true, 3:true};
function checkAnswer() {
    // считаем что ответы правильные
    var error = false;
    // чекбоксы
    var inputs = document.getElementsByTagName('input');
    for (var i = 0; i < inputs.length; i++) {
        // галка
        var checked = inputs[i].checked;
        // является ли вариант правильным
        var right = answer[i+1] == true;
        // если отметка не является правильной
        if (checked !== right) {
            error = true;
            // дальше можно не проверять
            break;
        }
    }
    var output = document.getElementById('output');
    output.value = error ? 'Ошибка!!!' : 'Зачот!!!';
    // предотвращаем отправку формы
    return false;
}
</script>
</head>
<body>
<form onsubmit="return checkAnswer()">
    <h4>Вопрос?</h4>
    <p><label><input type="checkbox">Вариант 1*</label></p>
    <p><label><input type="checkbox">Вариант 2</label></p>
    <p><label><input type="checkbox">Вариант 3*</label></p>
    <p><button type="submit">Готово</button> <button type="reset">Сбросить ответы</button></p>
    <p><textarea id="output" readonly></textarea></p>
</form>
</body>
</html>

Vasy 03.03.2013 08:04

var right = answer.indexOf(i + 1) !== -1;

Почему оно гвоорит мне что данный обьект не поддерживает этод метод?

Нет спасибо большое оно в браузере все работает,но ругаетса в компиляторе.

И возможно же комбинировать в одном тесте сразу checkbox and radio?

danik.js 03.03.2013 08:16

Потому что вы сидите на осле восьмой версии. Он очень дряхлый, глупый и без пендаля не умеет indexOf. Ну ничего, я поправил код, теперь даж ваша кляча его поймет.

Vasy 03.03.2013 08:26

Цитата:

Сообщение от danik.js (Сообщение 238418)
Потому что вы сидите на осле восьмой версии. Он очень дряхлый, глупый и без пендаля не умеет indexOf. Ну ничего, я поправил код, теперь даж ваша кляча его поймет.

спасибо вам огромное за полное обьяснение.

danik.js 03.03.2013 08:42

indexOf - часть стандартна EcmaScript 5. IE8 из этого стандарта ничего почти не поддерживает. Можно подключить библиотеку es5-shim.js , она добавляет поддержку недостающих методов.


Часовой пояс GMT +3, время: 01:08.