2012-11-28 26 views
2

在我的遊戲中,我想確保每次看起來停止加載函數多次,啓動按鈕只被單擊一次。當計數被重置時,JQuery - bind()

如果計數大於零,我已經寫了一些代碼來計算點擊和解除綁定。

var oneClick = 0; 
$(".start-btn-wrapper").bind("click", function() { 
    oneClick++; 
     if (oneClick > 0) { 
     $(this).unbind("click"); 
    } 
     newGame(); 
}); 

這工作得很好,但我需要一種方法來再次綁定它準備出現下一次(當點擊重啓BTN),所以我寫了這個重置計數。

$(".restart-btn").click(function() { 
    resetGame(); 
    oneClick = 0; 

}); 

出於某種原因,這並不做的工作,我期待等了soloution

+0

如果您使用最新的jQuery您需要更改['.bind() '](http://api.jquery.com/bind/)到['.on()'](http://api.jquery.com/on/) –

回答

2

你不再具有約束力,但只是改變一鍵式,它甚至沒有測試作爲事件處理程序$(".start-btn-wrapper")不再綁定。

但不是解除綁定/重新綁定,這是昂貴的,爲什麼不只是測試oneClick

$(".start-btn-wrapper").bind("click", function() { 
    if (oneClick++ > 0) return; 
    newGame(); 
} 

請注意,如果你只需要兩種狀態,一個布爾值會更清楚:

var clickable = true; 
$(".start-btn-wrapper").bind("click", function() { 
    if (!clickable) return; 
    newGame(); 
    clickable = false; 
} 
$(".restart-btn").click(function() { 
    resetGame(); 
    clickable = true; 
}); 
0

簡單

var oneClick = 0; 
$(".start-btn-wrapper").bind("click", function() { 

     if (oneClick > 0) { 
     return false; 
    } 
     oneClick++; 
     newGame(); 
}); 

$(".restart-btn").click(function() { 
    resetGame(); 
    oneClick = 0; 

}); 
1

jQuery有一個內置的方法正是這個用法。這是.one()

因此,所有你需要做的就是

$(".start-btn-wrapper").one('click',newGame); 

和重啓

$(".restart-btn").click(function() { 
    resetGame(); 
    $(".start-btn-wrapper").one('click',newGame); 
}); 
+0

簡單! +1謝謝! @Gaby aka G. Petrioli – sMilbz

0
var oneClick = 0; 

function clickHandler() { 
    oneClick++; 
     if (oneClick > 0) { 
     $(".start-btn-wrapper").unbind("click"); 
    } 
     newGame(); 
} 

$(".start-btn-wrapper").bind("click", clickHandler); 

$(".restart-btn").click(function() { 
    resetGame(); 
    oneClick = 0; 

    $(".start-btn-wrapper").bind("click", clickHandler); 
});