Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   По событию OnClick не вызывается обработчик на Javascript (https://javascript.ru/forum/events/56727-po-sobytiyu-onclick-ne-vyzyvaetsya-obrabotchik-na-javascript.html)

Fotinia 01.07.2015 19:26

Вложений: 1
Посмотрите как работает вложение. Это все что мне нужно

laimas 01.07.2015 20:07

Вы знаете как передается форма? Это будет массив, ключами которого являются имена полей, а значениями их значения. То есть, испытуемый может и не вводить на какие либо задачи вариант ответа, а значит и сервер просто может не проверять такие задачи. Это к тому, что требование сделать кнопку проверить для каждой задачи ОТДЕЛЬНО не имеет под собой никакого оправдания, а только лишь неудобство для клиента.

Цитата:

Сообщение от Fotinia
В тесте 4 задания, в которых нужно выбрать правильный вариант.

Значит проверять нужно на сервере - отправляйте форму, проверяйте, что на сервере можно сделать очень просто - по ключу и индексам полей в который вводится вариант, в массиве, который содержит для каждого индекса этого ключа номер верного варианта. То есть сравнение принятого значения со со значением в массиве.

Возвращая результат теста, в задачах с правильными ответами помещать тег IMG, которого изначально в форме нет. Вот и все, JS тут боком.

Я не работаю репетиром, но знаю, что ваш подход к тесту не верный.

Fotinia 01.07.2015 20:14

Причем здесь репетитор. Мне не понятно почему в маленьком файле работает как мне надо, а на сайте нет. Простите, за беспокойство. Но у меня не достаточно квалификации, чтобы понять то, что вы мне пишете. Если не можете помочь конкретно,давайте закончим беседу. А то вы мне объясняете как правильно тест делать, а меня вопрос программирование интересует. Я не знаю про какие массивы вы говорите.

Deff 01.07.2015 20:50

Fotinia,
Покажите инет версию тестовой страницы с проблемой

laimas 01.07.2015 20:51

<?php
//если пришла форма, проверка вариантов
//выбираем только те задачи, на которые есть варианты ответа
if($_POST AND $chk = array_diff(array_map('intval', $_POST['check1']), array(0))) {
    //если $chk не пустой, значит есть варианты ответов
    //массив правильных ответов, 
    //первичный клоюч массива определяет страницы с задачиами вариантов, то есть Вариант 1 и т.д.
    //номер страниц вариантов присоедняется к имени поля ввода варинта ответа
    //а индексы вложенных ключей равны индексам полей
    $checked = array(
        //правильные ответы для страницы "Варианты 1"
        'check1' => array(1=>2, 3, 3, 1 , 2, 4)         
    );
    //идентификатор ключа страницы
    $key = key($_POST);
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form method="post" autocomplete="off">
<div>
<p>Задача 1</p>
<?=$chk && array_key_exists(1, $chk) ? ($chk[1]==$checked[$key][1] ? '<p>Верно</p>' : '<p>Не верно</p>') : null?>
<input name="check1[1]" />
</div>
<div>
<p>Задача 2</p>
<?=$chk && array_key_exists(2, $chk) ? ($chk[2]==$checked[$key][2] ? '<p>Верно</p>' : '<p>Не верно</p>') : null?>
<input name="check1[2]" />
</div>
<div>
<p>Задача 3</p>
<?=$chk && array_key_exists(3, $chk) ? ($chk[3]==$checked[$key][3] ? '<p>Верно</p>' : '<p>Не верно</p>') : null?>
<input name="check1[3]" />
</div>
<div>
<p>Задача 4</p>
<?=$chk && array_key_exists(4, $chk) ? ($chk[4]==$checked[$key][4] ? '<p>Верно</p>' : '<p>Не верно</p>') : null?>
<input name="check1[4]" />
</div>
<div>
<p>Задача 5</p>
<?=$chk && array_key_exists(5, $chk) ? ($chk[5]==$checked[$key][5] ? '<p>Верно</p>' : '<p>Не верно</p>') : null?>
<input name="check1[5]" />
</div>
<div>
<p>Задача 6</p>
<?=$chk && array_key_exists(6, $chk) ? ($chk[6]==$checked[$key][6] ? '<p>Верно</p>' : '<p>Не верно</p>') : null?>
<input name="check1[6]" />
</div>
<br /><br />
<button>Проверить</button>
</form>
</body>
</html>


Загрузите на сервер этот пример под любым именем и выполните. Форма одна, но проверятся будут только те "задачи", на которые есть варианты ответов. Не нужно кучи форм!

Проверять должен сервер, а проверяется просто - по ключам и индексам. Какое отношение к этой проверке имеет JS?

Только содержимое таких страниц, сами задачи, нужно выводить в цикле и в нем же делать проверку, а не прописывать многократно код.

Все, более я не знаю как вам пояснить то, что вы не с того требуете результат - с клиента.

Fotinia 01.07.2015 23:13

Dell, вотссылка на страницу
http://mathforyou.ru/7klass/7klassDud.php?t1=1

Fotinia 01.07.2015 23:24

laimas, огромное спасибо за код. Это почто то, что мне нужно. А вы не можете показать, как вводить значение по нажатию кнопки ПРОВЕРИТЬ рядом с каждым полем ввода (только для одного варианта) и чтобы вместо ответа Приавильно, появилась картинка (любая) Я сама настрою нужную. Огромное спасибо за ответ!

laimas 02.07.2015 04:33

Цитата:

Сообщение от Fotinia
Я много лет работаю репетиром и мне так нужно, да и не аналогичных ресурсах так делают. Отдельно проверка каждого вопроса.

А для того, чтобы сделать нужное для себя обязательно смотреть как сделано на других ресурсах? Я, например, думаю так - мне нужно вот это, которое будет соответствовать моим целям, для этого надо создать А, Б..., а клиенту, то есть ученику, было удобно и чтобы проверка каждой задачи не приводила к отправке формы, что может привести любого учащегося в бешенство.

Вы ведь так и не сказали ни слова о целях этого теста, но много конкретики о кнопках, картинках и прочем, что без цели является чем-то оторванным от реалий.

Если бы я был репетитором, а это оплата моих услуг, а значит тест, это проверка знаний подопечных, а не запросы клиента в никуда, и проверяются знания исключительно сервером, то:

1) сервер имеет в базе таблицу задач, каждая из которых под уникальным идентификатором (номером), а также распределены, например, по разделам математики, по которым динамически строится меню выбора задач, и соответственно выводятся страницы этих задач

2) в базе также хранятся и данные моих подопечных, под уникальными идентификаторами

3) варианты ответов также запоминаются в базе, в таблице теста, в которую пишутся - идентификатор отвечающего, идентификатор задачи, вариант ответа на задачу, дата и время ответа.

4) руки чешутся иметь у каждой задачи кнопку "Проверить", значит чтобы не бесить подопечных, делаем проверку ответа с использованием Ajax

5) результаты теста из таблицы тестов доступны для просмотра и мне, репетитору, и всем подопечным, с разницей в том, что я могу просматривать результаты всех и давать им оценку, а подопечные могут видеть только результаты своего теста.

И только после этого решаем вопросы вывода меню, страниц, кнопочек и плюшечек различных. Из этого и будут распределятся роли - от 1 до 5, это сервер, а клиентский JS только в 4, и только сделать асинхронный запрос по отправке варианта ответа, получить результат проверки и отобразить его.

У вас же все уперлось в кнопочки и картиночки, а что, зачем и почему не понятно. А на них можно дать 1000 и один вариант как сделать, но без гарантии того, что это в конечном итоге и нужно будет.


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