2017-02-13 107 views
-1

我試圖找到一種方法來觸發一個事件,只是當一個鍵被按下,而不是當它被按下時。所以我做這樣的事情:爲一個keyPress事件觸發一個事件

$(document).keypress(function(e) { 
if(e.which == 102) { 
    bool = true;  
    } 
}); 

,然後在handleEvents 的setTimeout

if (bool){ 
     //do thing just one time 
    } 
+0

使用'keydown'或'keyup'事件。 – Barmar

回答

1

使用​​,而不是keypress

您有以下次序按時間順序:

  • 鍵下鍵按鍵了

$(document).keypress(()=> console.log('I am keypress')) 
 
$(document).keydown(()=> console.log('I am keydown')) 
 
$(document).keyup(()=> console.log('I am keyup'))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h1>Press any key</h1>

0

如果你正在尋找一個單例類事件(事件處理程序只運行一次),您可以使用jQuery功能.one()。這將在運行一次後自動解除綁定事件處理程序。例如:

$(document).one('keyup', function(event){ 
    if (event.keycode === 102){ 
    // code... 
    } 
}); 

*請注意,在一個按鍵式的事件使用這種似乎並不明智的,因爲處理程序將通過被解放的第一次運行,無論是否被按下正確的鍵。

這聽起來像你希望你的事件處理程序只有在用戶完成按下鍵後才能運行。像其他評論一樣,我建議使用'keydown''keyup'事件。