2016-12-21 21 views
3

フォームにハードコードされた複数の選択肢テストをHTMLで作成しています。JavaScriptとjQueryを使用してフォームに関連するすべてのアクションを実行しています。しかし、私のonClickイベントは発射されていないようです。コンソールを見ると、id 'submission'を持つイベントにフックし、 'on'に移動し、clickイベントでsubmitAnswers()関数を起動するのではなくブラウザを更新することがわかりました。javascript - jQuery onClickイベントが起動しない

あなたは次のように e.preventDefault()を使用して submitボタンのデフォルトの動作を阻止する必要が
<form name="javaScriptQuiz" id="jsTest"> 

<div class="form-group quiz-questions"> 
<h3>1. First question is either true or false.</h3> 
    <label for="q1a"> 
    <input type="radio" name="q1" value="a" id="q1a"> A. True &nbsp; 
    </label> 
    <label for="q1b"> 
    <input type="radio" name="q1" value="b" id="q1b"> B. False &nbsp; 
    </label> 
    <h3>2. Second question is either true or false.</h3> 
    <label for="q1a"> 
    <input type="radio" name="q1" value="a" id="q1a"> A. True &nbsp; 
    </label> 
    <label for="q1b"> 
    <input type="radio" name="q1" value="b" id="q1b"> B. False &nbsp; 
    </label> 
<input class="btn btn-primary btn-lg" type="submit" name="submit" value="Submit!" id="submission"> 

</form> 

$('#submission').on('click', function() { 
     console.log('Submit fires'); 
     submitAnswers();      
}); 

function submitAnswers() { 
    var total = 2; 
    var score = 0; 

    //captures each of the questions answers in a variable 
    var q1 = document.form['javaScriptQuiz']['q1'].value; 
    var q2 = document.form['javaScriptQuiz']['q2'].value; 

    //Validation 
    for(var i = 1; i <= total; i++){ 
     if(eval('q' + i) == null || eval('q' + i) == ''){ 
      alert('You missed a question'); 
      return false; 
     } 
    } 

    // Are the answers to test 
    var answers = ['b', 'a']; 
    for(var i = 1; i <= total; i++){ 
     if(eval('q' + 1) == answers[i - 1]){ 
      console.log('Evaluating answers'); 
      score ++; 
     } 
    } 
} 
+3

送信ボタンからボタンにボタンの種類を変更します。それはフォームを提出しているためです。そして最後にあなたの提出の回答機能にすべてが正しければ '$( '#Yourformid')を使用してください。submit();' – Nadeem

答えて

1

submit-のために「提出」の名前を使用しないようにしてくださいこれは良い考えではありません。 私が見る唯一のエラーは、document.formsではなく、submitAnswers()関数の文字がありません。document.formです。私はコードを試して、それは最新のFirefoxで動作します。あなたのコード内

+1

申し訳ありませんが、私は戻って答えるのに時間がかかりましたが、それはまったく問題でした。私はまだ少し初心者ですので、私は助けを感謝します。 :) – Coffeeteer

1

$('#submission').on('click', function(e) { 
     console.log('Submit fires'); 
     e.preventDefault(); 
     submitAnswers();      
}); 
+0

なぜあなたは予防が必要だと思いますか?彼の機能は虚偽を返します - それは彼がすでに行った予防です。彼はdocument.forms-missedの文字にアクセスする際にエラーがあります。なぜなら、彼はブラウザの未定義の動作を持っているのです。 – kay27

-1

が解決法1:ボタンにあなたの送信ボタンの種類を変更

<input class="btn btn-primary btn-lg" type="button" name="submit" value="Submit!" id="submission"> 

対処方法2: 変更クリックイベントを送信して提出する

$('#jsTest').on(submit,function(){ 
    ....}); 
1

すべてのHTMLのFirsは無効です。両方の質問のラジオボタンには同じ名前属性があります。

<form name="javaScriptQuiz" id="jsTest"> 
<div class="form-group quiz-questions"> 
<h3>1. First question is either true or false.</h3> 
    <label for="q1a"> 
    <input type="radio" name="q1" value="a" id="q1a"> A. True &nbsp; 
    </label> 
    <label for="q1b"> 
    <input type="radio" name="q1" value="b" id="q1b"> B. False &nbsp; 
    </label> 
    <h3>2. Second question is either true or false.</h3> 
    <label for="q1a"> 
    <input type="radio" name="q2" value="a" id="q1a"> A. True &nbsp; 
    </label> 
    <label for="q1b"> 
    <input type="radio" name="q2" value="b" id="q1b"> B. False &nbsp; 
    </label> 
<input class="btn btn-primary btn-lg" type="submit" name="submit" value="Submit!" onclick="return submitAnswers();" id="submission"> 

</form> 

スクリプト: - - :

function submitAnswers() { 
    event.preventDefault(); 
    var total = 2; 
    var score = 0; 
    //captures each of the questions answers in a variable 
    var q1 = document.form['javaScriptQuiz']['q1'].value; 
    var q2 = document.form['javaScriptQuiz']['q2'].value; 

    //Validation 
    for(var i = 1; i <= total; i++){ 
     if(eval('q' + i) == null || eval('q' + i) == ''){ 
      alert('You missed a question'); 
      return false; 
     } 
    } 

    // Are the answers to test 
    var answers = ['b', 'a']; 
    for(var i = 1; i <= total; i++){ 
     if(eval('q' + 1) == answers[i - 1]){ 
      console.log('Evaluating answers'); 
      score ++; 
     } 
    } 
} 

Here's同じ作業用のペンここで有効なマークアップです。

+0

私が投稿したこのコードは、私が元々作成したものの省略されたバージョンでした、私はコピーと貼り付けで何かを逃したと思います。私はそれを逃したとは信じられません。しかし、私のエラーを見つけるのを手伝ってくれてありがとう。 :) – Coffeeteer

-1

type="input"で入力をクリックするデフォルトの動作は、入力が含まれているフォームを送信することです。あなたはそれがフォームを送信したくない場合は、そのため

は、あなたが起きてから、フォームハンドラを提出追加し、デフォルトの動作を阻止する必要があります。

1

<input class="btn btn-primary btn-lg" type="button" name="submit" value="Submit!" id="submission"/> 

か、のonclick = "your_function_name()" のように入力タグ自体に関数自体を呼び出すことができますに

<input class="btn btn-primary btn-lg" type="submit" name="submit" value="Submit!" id="submission"> 

を変更。あなたのコードのために、それはなります:

希望これは.. ..役立つでしょう!

+0

ありがとう私はあなたの最初の提案を使用しました。私はまだコーディングに少し新しくなっているので、なぜボタンが「提出する」よりも優れているのか教えてください。ちょうど私は将来の参照のためにそれを使用します。 – Coffeeteer

関連する問題