2017-07-06 66 views
1

我在onclick函數中通過if/else語句重複循環時遇到問題。這是一個遊戲,你必須說出一個單詞是否有效,並且你繼續前進,直到你發現一個錯誤。在函數中重複循環if/else語句

儘管如此,代碼會經歷if/else的一個分支,其次數與您所做的問題的次數相同。所以第一個問題一次,第二個問題兩次等等。所以在第五個問題中,你會得到5個警告框,你的分數將會增加5而不是1.

這是相當長的一段代碼,否則它會起作用(我沒有做過喜 - 比分還沒有),否則。我已經把它縮短了一小部分,我認爲這個問題一定是存在的。

完整的東西是http://www.absp.org.uk/test/study3lw.shtml

function quiz(){ 

... 

    $('#true').on('click', function(){ 
     ... 
     if (valid === true){   // ie got it right 
      score++; 
      alert(score); 
      ... 
     } else {      // got it wrong 
      ... 
      score = 0; 
      $('#word').append("*"); 
      alert("Game Over!"); 
     } 
    }); 

    $('#false').on('click', function(){ 
     ... 
     if (valid === false){   // ie got it right 
      score++; 
      alert(score); 
      ... 
     } else {      // got it wrong 
      score = 0; 
      alert("Game Over!"); 
      ... 
     } 
    }); 

} 


$('#start').on('click', function(){ // calls the above for each question 
    ... 
    quiz(); 
}); 
+0

您應該添加的'測驗外的事件監聽器()'因爲你只需要添加它們一次。 – DonovanM

+0

是啊似乎工作,只需要重寫很多它現在封閉等。呃。 – Craig

+0

這可能有助於爲此使用面向對象的編程,但不幸的是,這仍然需要大量的重寫。 :( – DonovanM

回答

0

看起來你正在爲每一個問題一個新的單擊事件,所以由第五個問題,你有你的按鍵5個事件偵聽器。我相信jQuery具有.one(),它會在事件被解僱後取消註冊事件。嘗試使用。一()來代替。對()

http://api.jquery.com/one/

+0

這部分工作,如果我改變$('#start')。....到.one它將會工作一次,就是這樣,如果我離開它並改變true和false .on位,那麼如果我點擊true連續3次,然後點擊false它會運行它4次 我想我需要重寫它,所以我包裝的真和假將其轉換爲一個覆蓋事件發生的函數,並使用.one處理函數,或者找到某種方式來結束當前事件處理函數,當它到達函數結尾時,我都不知道該怎麼做。 – Craig