2013-01-31 78 views
0

我正在構建一個小小的js問答遊戲。用下面的代碼,用戶選擇一個答案,然後點擊答案按鈕來提交,它檢查答案是否正確。換句話說,有兩個步驟。首先,選擇。其次,提交。我想知道是否有辦法消除第二步,以便事件發生在選擇上。選擇單選按鈕時觸發事件

如果需要,這裏是一個小提琴。

http://jsfiddle.net/mjmitche/D5H9z/

我想我不知道如何使一個普通的事件對所有的選擇框發起的檢查,但隨後,在同一時間,能夠檢查的選擇,看它是否是正確的,如果這是有道理的。

請注意,遊戲最終會使用類似下劃線模板的內容來插入問題並在字段中回答選擇,因此如果這影響了您設置的方式,請考慮它。

預先感謝您

HTML

<fieldset id="question1"> 
     <legend>What is the answer to this question?</legend> 
     <label><input type="radio" name="q1" value="right"> Right answer</label> 
     <label><input type="radio" name="q1" value="wrong"> Wrong answer</label> 
      <ul> 

    </fieldset> 

      <input type="button" id="answer"> 

JS

document.getElementById("answer").onclick = validate; 
    function validate() { 
      var radios; 
      var i; 
      var right; 
      radios = document.getElementById("question1").getElementsByTagName("input"); 

      right = false; 
      for(i = 0; i < radios.length; i++) { 
        if(radios[i].value == "right" && radios[i].checked == true) { 
          right = true; 
        } 
      } 

      if(right) { 
        alert("You answered correctly"); 
      } else { 
        alert("Wrong answer"); 
      } 
    } 

更新,遊戲的最終版本將使用骨幹,支持事件像這樣

events:{ 'click #sayhello': 'validate' 
    }, 

這個問題的前兩個答案提出了'內聯'解決方案,但我希望能夠適合骨幹的事件處理。我將用什麼替換#sayhello以觸發此代碼中的驗證功能。

+0

如果您使用Backbone.js的,你想要一個支持骨幹的答案,爲什麼你沒有提到它你的文章?你爲什麼不用你的問題來標記你的問題? – Madbreaks

+0

一般原則是相同的,有無骨幹標籤,我只是想知道是否有一個選擇器可以用來觸發驗證事件,而沒有特定的按鈕,需要包括用戶的第二步(即選擇,然後提交) – BrainLikeADullPencil

回答

0

應用的onclick處理程序每​​個單選按鈕:

<input type="radio" name="q1" value="right" onclick="validate"> 

fiddle here

+0

對不起,我不想要這樣的內聯。我更新了OP。你能否用我提供的新代碼來提示我將放入#sayhello(觸發驗證函數)的位置 – BrainLikeADullPencil

-1

試試這個:

<fieldset id="question1"> 
    <legend>What is the answer to this question?</legend> 
    <label><input type="radio" name="q1" value="right" onclick="javascript:check('right')"/> Right answer</label> 
    <label><input type="radio" name="q1" value="wrong" onclick="javascript:check('wrong')"/> Wrong answer</label> 


<script> 
    function check(answer){ 
     alert(answer+" answer"); 
    } 

</script> 

http://jsfiddle.net/D5H9z/3/

+0

對不起,我不想要這樣的內聯。我更新了OP。你可以建議我用#sayhello(觸發validate函數)來代替我提供的新代碼 – BrainLikeADullPencil

+0

這與我的回答有什麼不同,除了函數調用之前不必要的'javascript:'嗎? – Madbreaks

相關問題