По событию OnClick не вызывается обработчик на Javascript
Здравсивуйте. Помогите, пожалуйста, разобраться в проблеме. При нажатии на кнопку button ее событие OnClisk не работает. Вот ссылка на
Чтобы перейти к проблемной кнопке нужно выбрать в меню Тест1, ариает1 и нажать самую первую кнопку проверить. В поле ввода должны появиться 111. Если кто-то поможет буду очень благодарна, так как уже очень долго не могу понять в чем дело. http://javascript.ru/forum/images/smilies/cray.gif |
Вы в функцию передаете не объекты, а строку, а в самой функции пытаетесь работать с ней как с объектом.
PS. И выбросьте xmlns="http://www.w3.org/1999/xhtml" из тега html, хотя бы пока не разберетесь что это, как это, и зачем нужно, и нужно ли. |
Пожалуйста, помогите исправить. В отдельном файле, созданном для проверки рабоет, а как вставляю в большой файл в таблице, то нет. Здесь работает как надо
<!DOCTYPE html PUBLIC "> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <script language="javascript"> // Проверка решения function mark1(obj) { var n=Number(obj.t1.value); if (n==1) obj.pic.src="ok.png" else obj.pic.src="no.png"; } </script> <title>qq</title> </head> <body> <table> <tr> <td> <form name="rez1"> <b>Ответ:</b> <input name="t1" type="number" style="width: 40px" min="1" max="4" step="1" value=""> <img name="pic" src="bl.png" height="40px" width="40px"> <input name="r1" type="button" value=" Проверить " onClick="mark1(rez1)"> <? if ($Prv != 2 ) { ?> <input type="button" value="Показать решение" onclick="show_hide('a1',this);"> <?}?> <input type="button" value=" Задать вопрос "> </form> </td> </tr> </table> </body> </html> |
Может все это выбросить? Что значит тест - результат решения формулы с введенными в поля значениями? Значит надо выполнять это в JS, то есть в функцию должна передаваться формула (или выбираться из ранее описанных), подставляться значения из полей и выводить результат выполнения.
Проглядел сначала, что rez1, это имя формы. |
По нажатию кнопки должна в форму выводиться картинка. Но этого не происходит
|
Цитата:
|
И еще на странице нет кода для функции show_hide ()
|
Цель теста: в теге
<input name="t1" type="number" style="width: 40px" min="1" max="4" step="1" value=""> нужно ввести число от 1 до 4. Далее нажимаем кнопку Проверить: <input name="r1" type="button" value=" Проверить " onClick="mark1(rz1)"> Если введено число 1, то должна выводиться каhтинка ok.png, иначе картинка no.png в теге <img name="pic" src="../img/bl.png" height="30px" width="30px"> Сначала установлена пустая картина bl.png. В зависимости от ввода картинка должна поменяться на галочку (если правильно) или крестик. Пожалуйста, помогите решить эту задачу!!! |
Вот процедура на JS, но ничего не происходит
<script type="test/javascript" language="javascript"> function mark1(obj) { var n=Number(obj.t1.value); if (n==1) obj.pic.src="ok.png" else obj.pic.src="no.png"; } </script> |
Цитата:
Насколько можно понять, в поле вводится вариант ответа, и да 1 - 4, но как быть с задачей 6, где нет вариантов? И кто решает что ответ верен - сервер после отправки формы или же клиент? |
Я ПОКА ХОЧУ ОТЛАДИТЬ ОТВЕТ НА ПЕРВЫЙ ВОПРОС, А ПОТОМ ПО АНАЛОГИИ ДАЛЬШЕ.
|
И ЕЩЕ. Я НЕ ЗНАЮ, КТО ДОЛЖЕН РЕШАТЬ КЛИЕНТ ИЛИ СЕРВЕР. ВИДИМО МНЕ ВСЕ РАВНО. ЭТО ВАЖНО? МНЕ НУЖНО РЕШИТЬ ЗАДАЧИ И Я СДЕЛАЛА, КАК НАШЛА В КНИГЕ, НО НЕ РАБОТАЕТ
|
А я вам предлагаю таковую проверку выбросить, но чтобы что-то предложить, нужно знать условия.
Во-первых, у вас нет как таковой формы, а значит никакой отправки на сервер не будет. Во-вторых, если будут форма, то щелчок по копке "Проверить" будет ее отправлять, а значит показывать/не показывать картинку будет решать сервер, а JS побоку. То есть вы спрашиваете как сделать вышивку, но не поясняете вышивать крестиком или гладью. Например, если проверка, это блокировка отправки формы при неверно указанном варианте, то тогда и .show() и .hide() для картинки, это забота клиента. Но вот смысл такого я лично не понимаю, так как всегда можно будет "достучаться" в конце концов до правильного ответа. Если сервер проверяет, что логичнее при тесте, то проверяйте на сервере ответ, и задавайте соответствующий стиль display для изображения, в зависимости от ответа. А эту функцию и "клики" к ней выбросить. PS. Опять не так - формы есть, но как все "упрятано" не сразу и найдешь. :) Поменьше бы TD и по больше других элементов, так, чтобы каждая задача вся была описана в одной ячейке. |
Вы меня простите, но я ничего не поняла, кроме того, что сделать нужно как то по другому. Еще раз повторяю задачу. Сначала есть рисунок, на котором ничего нет. В поле вводится ответ от 1 до 4. Если ответ верный, то пустая картинка заменяется на картинку с галочкой. Если неверный, то картинка с крестиком. Как это сделать, не понимаю. Пожалуйста, подскажите.
|
А это разве не форма или нужна какаято еще
<form name"rz1"> <b>Ответ:</b> <input name="t1" type="number" style="width: 40px" min="1" max="4" step="1" value=""> <img name="pic" src="../img/ok.png" height="30px" width="30px"> <input name="r1" type="button" value=" Проверить " onClick="mark1(rz1)"> <? if ($Prv != 2 ) { ?> <input type="button" value="Показать решение" onclick="show_hide('a1',this);"> <?}?> <input type="button" value=" Задать вопрос "> </form> |
Цитата:
Если же тест как "проверь себя", то можно и на клиенте проверять, но тогда и подход иной должен быть. Достаточно в том же элементе, в который вводится вариант ответа в data-xxx, проверяя его с вводом. И функции не потребуется. |
Цитата:
Цитата:
|
Вложений: 1
Я не понимаю про какую цель вы спрашиваете. Мне нужно менять картинку в зависимости от введенного числа.
Если посмотреть более глобально, то есть тест. Его нужно решить и проверить ответы на сайте. В первом задании теста правильный ответ 1. Всего 4 варианта ответов. Нужно указать один из них. |
Цитата:
Вариант А) - цель теста, это проверка знаний. Как выполняется - форма должна быть одна, с одной кнопкой "Проверить" в конце всех задач. Испытуемый вводит варианты ответов на все задачи, жмет кнопку "Проверить". Сервер принимает форму, проверят варианты ответов, и в зависимости от них указывает стиль картинкам каждой задачи, и возвращает страницу клиенту с результатом проверки (теста). Вариант Б) - цель теста "проверь себя". Как выполняется - сервер не при делах, его задача только отдавать клиенту страницы. На клиенте при вводе варианта ответа автоматом показывается результат теста. Форм и кнопок для этого совсем не нужно. Так понятно? |
В тесте 4 задания, в которых нужно выбрать правильный вариант. Нужно сделать кнопку проверить для каждой задачи ОТДЕЛЬНО. Тестируемый сам решает какие задачи он будет решать и проверять ответ. Я много лет работаю репетиром и мне так нужно, да и не аналогичных ресурсах так делают. Отдельно проверка каждого вопроса.
|
Вложений: 1
Посмотрите как работает вложение. Это все что мне нужно
|
Вы знаете как передается форма? Это будет массив, ключами которого являются имена полей, а значениями их значения. То есть, испытуемый может и не вводить на какие либо задачи вариант ответа, а значит и сервер просто может не проверять такие задачи. Это к тому, что требование сделать кнопку проверить для каждой задачи ОТДЕЛЬНО не имеет под собой никакого оправдания, а только лишь неудобство для клиента.
Цитата:
Возвращая результат теста, в задачах с правильными ответами помещать тег IMG, которого изначально в форме нет. Вот и все, JS тут боком. Я не работаю репетиром, но знаю, что ваш подход к тесту не верный. |
Причем здесь репетитор. Мне не понятно почему в маленьком файле работает как мне надо, а на сайте нет. Простите, за беспокойство. Но у меня не достаточно квалификации, чтобы понять то, что вы мне пишете. Если не можете помочь конкретно,давайте закончим беседу. А то вы мне объясняете как правильно тест делать, а меня вопрос программирование интересует. Я не знаю про какие массивы вы говорите.
|
Fotinia,
Покажите инет версию тестовой страницы с проблемой |
<?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? Только содержимое таких страниц, сами задачи, нужно выводить в цикле и в нем же делать проверку, а не прописывать многократно код. Все, более я не знаю как вам пояснить то, что вы не с того требуете результат - с клиента. |
Dell, вотссылка на страницу
http://mathforyou.ru/7klass/7klassDud.php?t1=1 |
laimas, огромное спасибо за код. Это почто то, что мне нужно. А вы не можете показать, как вводить значение по нажатию кнопки ПРОВЕРИТЬ рядом с каждым полем ввода (только для одного варианта) и чтобы вместо ответа Приавильно, появилась картинка (любая) Я сама настрою нужную. Огромное спасибо за ответ!
|
Цитата:
Вы ведь так и не сказали ни слова о целях этого теста, но много конкретики о кнопках, картинках и прочем, что без цели является чем-то оторванным от реалий. Если бы я был репетитором, а это оплата моих услуг, а значит тест, это проверка знаний подопечных, а не запросы клиента в никуда, и проверяются знания исключительно сервером, то: 1) сервер имеет в базе таблицу задач, каждая из которых под уникальным идентификатором (номером), а также распределены, например, по разделам математики, по которым динамически строится меню выбора задач, и соответственно выводятся страницы этих задач 2) в базе также хранятся и данные моих подопечных, под уникальными идентификаторами 3) варианты ответов также запоминаются в базе, в таблице теста, в которую пишутся - идентификатор отвечающего, идентификатор задачи, вариант ответа на задачу, дата и время ответа. 4) руки чешутся иметь у каждой задачи кнопку "Проверить", значит чтобы не бесить подопечных, делаем проверку ответа с использованием Ajax 5) результаты теста из таблицы тестов доступны для просмотра и мне, репетитору, и всем подопечным, с разницей в том, что я могу просматривать результаты всех и давать им оценку, а подопечные могут видеть только результаты своего теста. И только после этого решаем вопросы вывода меню, страниц, кнопочек и плюшечек различных. Из этого и будут распределятся роли - от 1 до 5, это сервер, а клиентский JS только в 4, и только сделать асинхронный запрос по отправке варианта ответа, получить результат проверки и отобразить его. У вас же все уперлось в кнопочки и картиночки, а что, зачем и почему не понятно. А на них можно дать 1000 и один вариант как сделать, но без гарантии того, что это в конечном итоге и нужно будет. |
Часовой пояс GMT +3, время: 12:21. |