2011-03-10 36 views
1

我們假設我們有以下的jQuery代碼:Javascript/JQuery如何防止按住鍵時重複執行的功能?

$(document).bind('keyup', function(e) { 

arrows=((e.which)||(e.keyCode)); 

switch (arrows){ 

case 37: 

executeMyfunction(); 

break; 

} 

}); 

如果用戶按住左箭頭鍵(37)的executeMyfunction()反覆調用。

我該如何防止這種情況發生?

我以爲只有在釋放鍵但不工作的情況下,keyup纔會觸發(這就是爲什麼我使用鍵控,keydown也不起作用)。

+0

你能設置一個jsfiddle.net來顯示嗎? – 2011-03-10 00:27:40

+2

這工作正如我所期望的:http://jsfiddle.net/VMvcT/ – gilly3 2011-03-10 00:30:26

+0

@loannis嗯,你的TAB鍵必須被打破':)' – 2011-03-10 00:51:27

回答

1

我相信你必須解除事件。我認爲它不應該是keyup,而是keypress或keydown。

可能是這樣的。

(文檔)$ .bind( 'KEYDOWN',函數(E){

箭頭=((e.which)||(e.keyCode));

開關(箭頭){

殼體37:

executeMyfunction();

$(文件).unbind( 'KEYDOWN');

break;

} });

你將不得不重新綁定上KEYUP的功能,如果你想再次使用該事件:

的$(document).bind( 'KEYUP',函數(E){

開關(箭頭) {

殼體37: (文檔)$ .bind( 'KEYDOWN'); 斷裂; }

})

看看: http://api.jquery.com/unbind/

+0

這是行不通的http://jsfiddle.net/VMvcT/8/ – gadlol 2011-03-11 15:19:31

+0

看看這個問題,它同樣的問題,我也使用Ubuntu的http://stackoverflow.com/questions/2752524/javascript-keyup -doesnt工作,如預期-IT-執行合情況,其中-I-有 – gadlol 2011-03-11 16:11:43

0

那麼,你可以隨時撥打你的功能debounce。也就是說,如果你希望你的函數在短時間內沒有被觸發之後被調用。