2017-08-09 95 views
-1

我想檢查,使用jQuery,當一個鍵被按下,然後釋放。只有在發佈之後,我才希望該函數能夠運行(如果唯一的方法不涉及jQuery,但是如果有兩種方法,我寧願它是具有較少字節的方法)。
我敢肯定,該解決方案將使用keyup()keydown()keypress()函數的混合,但我還沒有弄清楚如何鏈接它們,以便代碼可以接收所需的輸出。我當前的代碼是:檢測當一個鍵被按下,然後使用jQuery釋放

$("body").keydown(function(event) { 
    $("body").keyup(function(event) { 
     console.log("key pressed/released"); 
     var keyPressed = keys[event.keyCode]; 
     player.hit(keyPressed); 
    }); 
}); 

但導致數十key pressed/released消息被記錄在控制檯後我釋放的關鍵。當我點擊一個鍵時,或者當我釋放它時,將keydown()keyup()分別帶走key pressed/released結果。 keypress()也不能代替keydown(),keyup(),或者僅僅依靠它自己。我應該做什麼來實現我想要的結果?

+0

我必須強烈建議您使用[Mousetrap](https://craig.is/killing/mice) –

+0

*「字節較少的字符」* - 您的意思不是jQuery.js文件本身?比方說,調用jQuery方法的三行代碼加上整個jQuery.js庫比十行非jQuery代碼「少」? – nnnnnn

+0

@nnnnnn是的,我的意思是在我的文件本身。這並不重要,雖然 –

回答

-1

那麼你可以創建一個變量,比如x。 x是錯誤的。分開keyup和keydown函數。在keydown下添加一個if(!x)並使x爲真。在keyup下添加一個if(x)並使x爲false。 我不編碼jquery,但我認爲這可能會有所幫助。

1

我想檢查,使用jQuery,當一個鍵被按下,然後釋放。
只有推出後,我希望函數運行

好吧,如果keyup被解僱,你可以肯定的關鍵是雙方按下和釋放,否則該事件將不火,所以這是真的一切你需要的。

$(document).on('keyup', function() { 
    console.log('key was released') 
}) 

或不jQuery的

document.addEventListener('keyup', function() { 
    console.log('key was released') 
}); 

你的代碼最終記錄幾十,然後數百封郵件,是因爲您綁定的事件處理程序內的事件,這是一個禁忌。

0

訣竅是將兩個函數分開,然後使用兩個函數都可以訪問的變量。

先說明沒有按鍵被按下。在你的keydown()裏面,運行一個條件來檢查當前是否有一個鍵被按下。通過在條件內設置key_pressed變量爲true,您只會觸發條件一次;當按鍵爲時首先按下

然後當密鑰被釋放時,將變量設置回false以表明當前沒有按鍵被按下。這將允許你在釋放第一個鍵後按二級密鑰,並再次觸發條件:

var key_pressed = false; 
 

 
$("body").keydown(function(event) { 
 
    if (!key_pressed) { 
 
    console.log("key pressed"); 
 
    key_pressed = true; 
 
    }; 
 
}); 
 

 
$("body").keyup(function(event) { 
 
    key_pressed = false; 
 
    console.log('key released'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

做這種方式的好處是,你可以觸發邏輯特別是當鑰匙被扣下時。

希望這會有所幫助!:)

+0

我很肯定你是通過@Confused Soul獲得ninja'd的,但是感謝你添加了代碼和代碼片段。 –

+0

男人,我希望我可以接受2個答案... –

+0

哈哈是的,他肯定是非常快的職位!他確實是第一個(有適當的答案),所以我不能抱怨你接受他的回答:)但是,請注意,雖然你不能接受兩個答案,你可以**改變選擇一個選定的答案(或者甚至完全不接受答案),如果你覺得一個更好。另外,一旦你的聲望達到15,你就可以[**]投票(https://stackoverflow.com/help/privileges/vote-up)任何答案來表明它是有用的 - 它不需要被接受:) –