2017-06-08 97 views
0

根據FCC項目(here),我目前正在構建一個「simons遊戲」。 在我的第一個版本(功能不全)演示中,我發現了一個奇怪的錯誤,每次單擊按鈕(彩色div)一次,回調函數「startAnswer」將被調用兩次,因此遊戲將無法正確播放,這是我在CodePen.io的代碼。 my codehttps://codepen.io/NxDon/pen/eRpRrajavascript點擊事件:點擊一次觸發兩次回調函數?

這裏是我的代碼是如何工作的說明:

  1. 我通過創建新GameConstructor(線99)一個遊戲對象;

  2. 我將回調函數綁定到「開始」和「嚴格」按鈕。

  3. 當玩家點擊「開始」按鈕時,會調用回調函數「startGame」(第17行),它會初始化一些參數,並顯示供玩家重複使用的答案;
  4. 當顯示結束時,我點擊四個環區域(我稱之爲按鈕)中的一個來匹配答案。環區在遊戲開始階段綁定了其具有回調函數「startAnswer(line 55)」的點擊事件,我的直覺是如果我點擊一次環區域,回調函數將調用一次,而不是startAnswer被連續調用兩次。那部分讓我困惑。謝謝你的幫助。
+1

你的代碼是非常大,因此請這裏提及的按鈕你點擊和調用回調函數「 startAnswer「兩次,這樣會更清楚。 –

+0

@BibhudattaSahoo感謝您的提示,我已經爲我的代碼添加了一些摘要,重點是我點擊了其中一個環區域,但回調函數「answerStart」被調用了兩次,無論出於何種原因。 –

回答

2

你有超過1個監聽按鈕,

$(id).off('click');//removes past listeners 
$(id).click(function(){ 
    startAnswer(); 
}); 

https://codepen.io/smsbhatt/pen/yXYPWW

+0

你說得對,每當我進入新的關卡時,我都會將新的點擊處理程序綁定到div上,謝謝。 –

+0

您的setClickable函數會多次觸發。 –

+0

根據你的要求做出來,不理解你的遊戲策略。 –