Кросс-браузерность JavaScript
Написан небольшой тест, в хроме работает великолепно, а в ИЕ выдает ошибки. Никак не могу разобраться, в чем ж причина. Помогите плиз =)
Вот пример первого вопроса. Картинки сюда заливать не стал, они не важны, помогите найти ошибку <html> <head> <title>Пробный тест DIRECTUM</title> </head> <body> <p><span style='font-size:12.0pt'><a href="rgiMaintask.aspx">К задачам</a></span> <span style='font-size:10.0pt;margin-left: 85%'> <script LANGUAGE="JavaScript"> // Заголовок страницы (h1) var title = '<h2>Пробный тест DIRECTUM</h2>'; var subtitle = "<h3>Вопрос 1</h3>"; var questions = [ { text: "К Вам по электронной почте пришло письмо с вложенным документом Word. Вы хотите сохранить этот документ в DIRECTUM без потери форматирования.Что Вам необходимо сделать:", answers: ["Просто открыть документ из письма, при этом появится окно с предложением сохранить документ в DIRECTUM", "Открыть письмо и выбрать пункт меню \"DIRECTUM/Сохранить вложение как документ\"", "Открыть документ из письма, затем создать новый документ в DIRECTUM и внести в него текст полученного документа", "Открыть документ из письма и нажать кнопку \"Сохранить\". Документ будет сохранен в DIRECTUM автоматически"], correctAnswer: 0 // нумерация ответов с нуля! }, ]; //Страница проверки результатов var yourAns = new Array; var score = 0; function Engine(question, answer) { yourAns[question] = answer; } function Score() { //<p><span style='font-size:12.0pt'><a href="rgiMaintask.aspx">К задачам</a></span> document.write('<h2>Пробный тест DIRECTUM</h2>'); document.write('<h3>Вопрос 1</h3>'); var questions = [ { text: "К Вам по электронной почте пришло письмо с вложенным документом Word. Вы хотите сохранить этот документ в DIRECTUM без потери форматирования.Что Вам необходимо сделать:", answers: ["<b><FONT color=\"green\">Просто открыть документ из письма, при этом появится окно с предложением сохранить документ в DIRECTUM</FONT></b>", "<FONT color=\"red\">Открыть письмо и выбрать пункт меню \"DIRECTUM/Сохранить вложение как документ\"</FONT>", "<FONT color=\"red\">Открыть документ из письма, затем создать новый документ в DIRECTUM и внести в него текст полученного документа</FONT>", "<FONT color=\"red\">Открыть документ из письма и нажать кнопку \"Сохранить\". Документ будет сохранен в DIRECTUM автоматически</FONT>"], correctAnswer: 0 // нумерация ответов с нуля! }, ]; for (var q = 0; q < questions.length; ++q) { var question = questions[q]; var idx = 1 + q; document.writeln('<br/><li><b><span class="quest">' + question.text + '</span></b><br/><br/>'); for (var i in question.answers) { document.writeln('<input type=radio name="q' + idx + '" value="' + i + '" onClick="Engine(' + q + ', this.value)">' + question.answers[i] + '<br/>'); } } var answerText = "Результаты:\n"; for (var i = 0; i < yourAns.length; ++i) { var num = i + 1; answerText = answerText + "\n Вопрос №" + num + ""; if (yourAns[i] != questions[i].correctAnswer) { answerText = answerText + "\n Правильный ответ: " + questions[i].answers[questions[i].correctAnswer] + "\n"; } else { answerText = answerText + ": Верно! \n"; ++score; } } answerText = answerText + "\nВсего правильных ответов: " + score + "\n"; document.write(answerText); document.writeln('<br><img src="1.1.png" style="left: 1px; top: 1px; width: 600px; height: 400px;" />'); document.writeln('<img src="1.2.png" style="left: 1px; top: 1px; width: 800px; height: 270px;" />'); document.writeln('<br><br><br><br><br><a href="2.aspx"><img border="0" id="img2" src="button.jpg" height="30" width="200" alt="" /></a>'); yourAns = new Array; score = 0; clearForm("quiz"); } function clearForm(name) { var f = document.forms[name]; for (var i = 0; i < f.elements.length; ++i) { if (f.elements[i].checked) f.elements[i].checked = false; } } </script> <style> span.quest {font-weight: ;} </style> <h1><script> document.write(title)</script></h1> <h2><script> document.write(subtitle)</script></h2> <FORM name="quiz"> <script> for (var q = 0; q < questions.length; ++q) { var question = questions[q]; var idx = 1 + q; document.writeln('<br/><li><b><span class="quest">' + question.text + '</span></b><br/><br/>'); for (var i in question.answers) { document.writeln('<input type=radio name="q' + idx + '" value="' + i + '" onClick="Engine(' + q + ', this.value)">' + question.answers[i] + '<br/>'); } } </script> </ol> <input type=button onClick="Score()" value="Проверить результаты"> </FORM> </body> </html> |
У меня и ff остался недоволен. Полностью сказать, в чём причина, пока не могу, но, как минимум, не нужно вызывать форму по имени (устарело). Назначьте ей id-шник и вызывайте по нему. Меньше ошибок будет.
От write и тем более writeln (боже, как вы его нашли вообще!) лучше избавляться. Добавляйте элементы в дом с помощью специальных ф-ций, типа appendChild и insertBefore (читайте тут). |
УЖАС!!!! дикий ужас, а не код.
Что за document.writeln? И вообще зачем вам document.write? И нельзя писать function(){ document.write } И выкинте то учебник по которому вы учились, он устарел! |
Skipp, я с вами всеми руками и ногами согласен) И будете смеяться - document.writeln действительно существует и работает! Я в шоке... Почитайте: http://javascript.itsoft.ru/methods/writeln.html
|
trikadin,
да это я знаю, это было возмущение типа что за ...?:) |
Remk, советую вам делать так или вроде того.
<form onsubmit="return test(this.test_sel)"> Вы знаете Javascript? <select name="test_sel"> <option value="1" id="1"><label for="1">Нет</label> <option value="2" id="2"><label for="2">Немного</label> <option value="2" id="3"><label for="3">I am John Resig</label> </select> <input type="submit" value="Проверить"> </form> <script> function test(test) { if (test.options[test.selectedIndex].value==1) alert("Вы правы") else alert("Вы глубоко заблуждаетесь"); return false; }; </script> Как видите код ИЗРЯДНО сокращается и становится доступней для понимая. Под радиобаттоны переписывается легко. Не знаю, почему я под селекты сделал... P.S. Skipp, а я впервые про writeln услышал. Я уж думал, человек как привык в pascal'е, так и пишет)) |
Дык я на С/С++ учусь =))) с явой не дружу, а тест делал кривовато) Нашел исходник теста, выцарапал только часть кода, типа функции просмотра ошибок результата и тд... остальное нарыл в порванном учебнике взятом с антрисоли... Я так и не понял это из-за document.write не работает в ИЕ?? он там ошибку пишет связанную с question.text) пишет что она NULL и не является объектом... при ее изменении и удалении , вообще не работает...
код сам по себе ужасный, согласен, но в связи с тем, что он нужен был вчера и обязательно нужен сегодня, у меня не было и нет времени доводить его до ума...а так как в код теста никто смотреть не будет, мне нужно чтоб только работал нормально)) Причем в ИЕ ибо человеку, которому я его писал не понравилось, что он работает только в хроме... Буду премного благодарен за помощь =) а особенно, если подскажете что откуда - на что и куда заменить)) |
Дело в том, что каждый вопрос должен быть на новой страничке, и при выборе ответа, скрипт должен будет выделить правильный ответ зеленым цветом, а неправильный красным, сказать об этом пользователю написав об этом ниже, и вставить скрин из учебнкиа, где написана глава про эту дребедень))) это в общем обучающий тест, перед главным тестированием, как то так...
|
Я тоже на C/C++ в институте учился, теперь сам учу JavaScript и медленно забываю си, но совсем не жалею.
А уж решать ошибку точно не буду так как, чёрт ногу сломит, лучше напишите задачу, небось 2 секундное решение. не, решение точно не 2 секундное:) |
Remk, попробуйте сходить в раздел "Работа". За умеренную плату там помогут.
|
Часовой пояс GMT +3, время: 11:54. |