2013-01-15 32 views
4

我正在創建一個捶打摩爾風格的遊戲,其中給出了總和,並且從容器底部向上數字生成了數字。遊戲的目的是點擊正確的答案並收集儘可能多的正確答案。不允許單擊按鈕/圖標不止一次

我的問題是,用戶可以多次點擊數字和其他圖標,導致它崩潰。有沒有辦法解決這個問題?

我又嘗試過這種jQuery one function

$(".character").one("click", function() { 
}); 

但圖標重新出現,所以我需要他們去點擊。

我也嘗試設置超時,但似乎無法讓它工作。有人能指出正確的方向嗎?

setTimeout(function() { 
    $(".character").one("click", function() { 
    }); 
}, 3000); 

小提琴:http://jsfiddle.net/GvNB8/

+0

不能讓你點擊,當點擊功能被激活,你禁用鏈接。這樣他們不能點擊兩次。基本上,直到它隱藏然後你重新激活它。 – Ladineko

+0

爲什麼人們會低調投票?我的問題出了什麼問題? – sMilbz

+0

爲什麼-1?這是一個很好的問題。我同意答案並不簡單。 – Andries

回答

3

你的主要問題是,你不與角色進行交互重新將它們顯示出來。在這種情況下,防止用戶點擊的唯一方法是建立一種方法,以防止連續快速連續兩次點擊超時。

這種方法會是這個樣子:

function clickThrottled(fn) { 
    var click = true; 
    return function() { 
    if(click) { 
     click = false; 
     fn.apply(this, arguments); 
     setTimeout(function() { click = true; }, 1000); 
    } 
    }; 
} 

然後,您使用該函數是這樣的:

$('.character').click(clickThrottled(function() { 
    // do your one time magic. 
})); 

我所用這裏是JavaScript的閉包。傳遞給click事件處理函數的函數只會調用底層函數一次,然後忽略所有調用1秒鐘,然後重新啓用它自己。

我還是建議你用的只是重新啓用元素的時候都重新繪製到屏幕上一個正常的方法去 - 但上面也適用..

+0

很好的答案,謝謝! @Tigraine – sMilbz

1

爲什麼不加說明此信息項目已被點擊:

$(".character").click(function(){ 
    if(!$(this).data("hasBeenClicked")) { 
     $(this).data("hasBeenClicked", true); 
     // the rest of your logic ... 
    } 
});