15.06.2011, 16:02
|
Новичок на форуме
|
|
Регистрация: 15.06.2011
Сообщений: 4
|
|
Кросс-браузерность 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>
|
|
15.06.2011, 16:42
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
У меня и ff остался недоволен. Полностью сказать, в чём причина, пока не могу, но, как минимум, не нужно вызывать форму по имени (устарело). Назначьте ей id-шник и вызывайте по нему. Меньше ошибок будет.
От write и тем более writeln (боже, как вы его нашли вообще!) лучше избавляться. Добавляйте элементы в дом с помощью специальных ф-ций, типа appendChild и insertBefore (читайте тут).
Последний раз редактировалось trikadin, 15.06.2011 в 16:47.
|
|
15.06.2011, 16:45
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
УЖАС!!!! дикий ужас, а не код.
Что за document.writeln?
И вообще зачем вам document.write?
И нельзя писать
function(){
document.write
}
И выкинте то учебник по которому вы учились, он устарел!
__________________
.
|
|
15.06.2011, 16:49
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Skipp, я с вами всеми руками и ногами согласен) И будете смеяться - document.writeln действительно существует и работает! Я в шоке... Почитайте: http://javascript.itsoft.ru/methods/writeln.html
|
|
15.06.2011, 16:56
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
trikadin,
да это я знаю, это было возмущение типа что за ...?
__________________
.
|
|
15.06.2011, 17:02
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
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'е, так и пишет))
Последний раз редактировалось trikadin, 15.06.2011 в 17:12.
|
|
15.06.2011, 17:05
|
Новичок на форуме
|
|
Регистрация: 15.06.2011
Сообщений: 4
|
|
Дык я на С/С++ учусь =))) с явой не дружу, а тест делал кривовато) Нашел исходник теста, выцарапал только часть кода, типа функции просмотра ошибок результата и тд... остальное нарыл в порванном учебнике взятом с антрисоли... Я так и не понял это из-за document.write не работает в ИЕ?? он там ошибку пишет связанную с question.text) пишет что она NULL и не является объектом... при ее изменении и удалении , вообще не работает...
код сам по себе ужасный, согласен, но в связи с тем, что он нужен был вчера и обязательно нужен сегодня, у меня не было и нет времени доводить его до ума...а так как в код теста никто смотреть не будет, мне нужно чтоб только работал нормально)) Причем в ИЕ ибо человеку, которому я его писал не понравилось, что он работает только в хроме... Буду премного благодарен за помощь =) а особенно, если подскажете что откуда - на что и куда заменить))
|
|
15.06.2011, 17:07
|
Новичок на форуме
|
|
Регистрация: 15.06.2011
Сообщений: 4
|
|
Дело в том, что каждый вопрос должен быть на новой страничке, и при выборе ответа, скрипт должен будет выделить правильный ответ зеленым цветом, а неправильный красным, сказать об этом пользователю написав об этом ниже, и вставить скрин из учебнкиа, где написана глава про эту дребедень))) это в общем обучающий тест, перед главным тестированием, как то так...
|
|
15.06.2011, 17:10
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
Я тоже на C/C++ в институте учился, теперь сам учу JavaScript и медленно забываю си, но совсем не жалею.
А уж решать ошибку точно не буду так как, чёрт ногу сломит, лучше напишите задачу, небось 2 секундное решение.
не, решение точно не 2 секундное
__________________
.
Последний раз редактировалось Skipp, 15.06.2011 в 17:18.
|
|
15.06.2011, 17:24
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Remk, попробуйте сходить в раздел " Работа". За умеренную плату там помогут.
|
|
|
|