2012-12-28 2 views
0

Я создаю обзорную страницу. Я использую три основные функции javascript: goNext(i), который скрывает определенные теги div и показывает следующий, goPrevious(i), который в значительной степени делает то же самое, но назад, и answerExists(questionNumber), который проверяет, отмечены ли все переключатели. Из точки я создал answerExists(), goNext(), и я полагаю, goPrevious() тоже, перестали отвечать. Может быть, это как-то связано с функцией onsubmit(), но я не могу это понять. Эти функции Javascript:onclick() действие не отвечает

function goNext(i) { 
    document.getElementById("div" + i).style.display = 'none'; 
    document.getElementById("div" + (i + 1)).style.display = 'block'; 
} 

function goPrevious(i) { 
    document.getElementById("div" + i).style.display = 'none'; 
    document.getElementById("div" + (i - 1)).style.display = 'block'; 
} 

function checkAnswers(questions) { 
    var answers = new Array(questions); 
    for(var i = 1; i <= questions; i++){ 
    answers[i-1] = false; 
    var radio = document.getElementsByClassName('Radio' + i); 
    for (var j=0; j < radio.length; j++) { 
     if(radio[j].checked == true) 
     alert(radio[j].value)answers[i-1] = true; 
    } 
    for (var i = 0; i < questions; i++){ 
     if(answers[i] == false){ 
     alert("Please answer all questions."); 
     return false; 
     } 
    } 
    return true; 
} 

И это HTML форма:

<form id="content" action="getresults.jsp" method="post" onsubmit="return checkAnswers(2);"> 
    <div id="div1" style="display: block;"> 
     <strong>1. Question 1</strong><br><br>&nbsp;&nbsp; 
     <input id="radio1" class="radio1" name="radio1" onclick="if (this.__chk) this.checked = false" onmousedown="this.__chk = this.checked" type="radio" value="Answer1" /> 
     Answer1<br><br><br><br> 
     <div class="auto-style1"> 
      <input name="next" onclick="goNext(1);" type="button" value="Next" /> 
     </div> 
    </div> 
    <div id="div2" style="display: none;"> 
     <strong>2. Question 2</strong><br><br>&nbsp;&nbsp; 
     <input id="radio2" class="radio2" name="radio2" onclick="if (this.__chk) this.checked = false" onmousedown="this.__chk = this.checked" type="radio" value="Answer 2" /> 
     Answer 2<br><br>&nbsp;&nbsp; 
     <input id="radio2" class="radio2" name="radio2" onclick="if (this.__chk) this.checked = false" onmousedown="this.__chk = this.checked" type="radio" value="dfgdgfdgf" /> 
     dgfgddgf<br><br><br><br> 
     <div class="auto-style1"> 
      <input name="previous" onclick="goPrevious(2);" type="button" value="Previous" />&nbsp; 
      <input name="submit" type="submit" value="Submit" /> 
     </div> 
    </div> 
</form> 

Это на самом деле все создается динамически, но до сих пор, он работал, прежде чем я добавил функцию checkAnswers().

+0

В чем проблема? – WEFX

ответ

3

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

Эти две синтаксические ошибки:

  • alert(radio[j].value)answers[i-1] = true; не является действительным заявление. (Я предполагаю, что вы намеревались удалить часть alert(radio[j].value), но подсказали не ту вещь?)
  • У вас есть больше лепестков-фигурных фигур {, чем правые фигурные фигурные скобки }.

После того, как вы исправить обе эти проблемы, сценарий должен по крайней мере запустить (хотя вы можете все еще есть некоторые отладки делать).

1

Вы вызываете checkAnswers с параметром 2 как и создаете массив с ним. ????

Приведенный ниже код покажет ошибку.

try{ 
    //your code 
}catch(er){ 
    alert(er); 
} 
0

Я хотел ответить вам шаг за шагом ....

1) Почему вам действительно нужно, чтобы проверить, является ли проверяются ответы на все вопросы? Я спросил вас об этом, потому что радиокнопки будут выбирать вариант по умолчанию ... или вы можете сделать «активную» вещь для определенного варианта ... При этом вам действительно не нужно проверять, все ли ответы на вопросы ... поскольку по умолчанию выбран один ответ ...

2) Событие click не работает, потому что кажется, что у вас нет «id» для входных тегов «next», «previous», «submit», ... Имеют отдельный идентификатор для каждого и фиксируют событие click этого конкретного тега с помощью jquery ...

например. Есть идентификатор для следующего <input id="next">

$("#next").click(function() { 
    //perform the action you need 
    } 

Сделайте это для всех событий щелчка ....

3) Наконец-то ... не использовать входные теги для элементов, которые вы хотели бы нажать ... Попробуйте использовать теги кнопок ...

Надеюсь, что это вам поможет:) ...

Смежные вопросы