0

アンケートのようなページを作成しています。私は3つの基本的なjavascript関数を使用します。goNext(i)これは、特定のdivタグを非表示にし、次の関数を表示します。goPrevious(i)これはほとんど同じですが、逆方向に実行され、answerExists(questionNumber)すべてのラジオボタンがチェックされているかどうかをチェックします。私が作成answerExists(), goNext()した時点から、私もそうだと思いgoPrevious()ますが、応答を停止しました。onsubmit()関数と関係があるのか​​もしれませんが、わかりません。これらはJavascript関数です:

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()機能していました。

4

3 に答える 3

3

問題は、checkAnswers関数に構文エラーがあり、インタープリターが構文エラーを含むスクリプトを破棄するため、他のすべての関数も破棄されることです。

これらは2つの構文エラーです:

  • alert(radio[j].value)answers[i-1] = true;は有効なステートメントではありません。(あなたはその部分を削除するつもりだったと思いますalert(radio[j].value)が、間違ったことを強調しましたか?)
  • {右中括弧よりも左中括弧の方が多くなります}

これらの問題の両方を修正したら、スクリプトを少なくとも実行する必要があります(ただし、まだデバッグを行う必要がある場合があります)。

于 2012-12-28T20:08:20.830 に答える
1

パラメータとして 2 を指定して checkAnswers を呼び出し、それを使用して配列を作成しています。????

以下のコードは間違いを示します。

try{
  //your code
}catch(er){
  alert(er);
}
于 2012-12-28T20:13:43.287 に答える
0

私はあなたに段階的に答えるのが好きです....

1) すべての質問に対する回答がチェックされているかどうかを確認する必要があるのはなぜですか? ラジオボタンはデフォルトでオプションを選択するので、これをお願いしました...または、特定のオプションに対して「アクティブ」なものを作成できます...これを行うことにより、すべての質問に回答したかどうかを実際に確認する必要がなくなります。 ..デフォルトでは1つの回答が選択されているため...

2)入力タグ「次」、「前」、「送信」の「ID」がないように見えるため、クリックイベントは機能しません...それぞれに個別のIDを持ち、その特定のタグのクリックイベントをキャプチャしますjqueryを使って...

例えば。次のIDを持っている<input id="next">

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

すべてのクリックイベントに対してこれを行います....

3) 最後に... クリックしたい要素に入力タグを使用しないでください... ボタンタグを使用してみてください...

それがあなたを助けることを願っています:) ...

于 2012-12-28T20:18:08.670 に答える