2014-12-05 77 views
0

我正在寫一個簡單的遊戲來幫助學習JavaScript。我想要發生的是,如果game.playerTurn是真的,那麼這個額外的方法被添加到我的按鈕。相反,如果game.PlayerTurn爲false,我不希望此方法執行。什麼是簡單的方法來添加和減少一個方法的一個按鈕,基於布爾var?

.bind似乎永遠添加該方法(所以如果語句不真的工作)。綁定和解除綁定看起來有點沉重,因爲每一輪都要做一些事情(有12個按鈕)。那邊的專家能否指出我正確的方向?通常的做法是什麼?

更多信息:當它輪到電腦時,我使用.trigger函數來推按鈕並將它們的值存儲在一個名爲game.computer的數組中。這一切都有效。

if(game.playerTurn){ 
    $("#one").bind("click", function() { 
     game.player.push(1); 
    }); 

    $("#two").bind("click", function() { 
     game.player.push(2); 
    }); 
} 

回答

1

您應該不使用綁定,而是使用on

此外,您可以將boolean檢查移入函數回調中。這是使用命名功能而不是多個匿名者節省一些代碼行的好機會:

$("#one").on("click", doClick(1)); 
$("#two").on("click", doClick(2)); 

function doClick(i) { 
    return function() { 
     if(game.playerTurn) game.player.push(i); 
    } 
} 
+0

非常有幫助!這將顯着減少我的代碼。謝謝。 – interestinall 2014-12-05 12:03:04

2

南轅北轍:

$("#one").bind("click", function() { 
    if(game.playerTurn){ 
     game.player.push(1); 
    } 
}); 

作爲一個小余,你並不需要每個按鈕的處理程序,如果你所有的按鈕可以被認定在一起,並使用data-value屬性你可以有1個處理程序:

<button class="numeric" data-value="1">One</button> 
<button class="numeric" data-value="2">Two</button> 

$(".numeric").bind("click", function() { 
    if(game.playerTurn){ 
     game.player.push($(this).data('value')); 
    } 
}); 
+0

只是讓我明白:$(這)將參照按鈕點擊,('值')會引用數據值? – interestinall 2014-12-05 11:58:55

+0

@interestinall幾乎,是的 – Jamiec 2014-12-05 12:02:59

+0

謝謝。好想法! – interestinall 2014-12-05 12:04:08

相關問題