2017-02-13 5 views
-1

Ich versuche einen Weg zu finden, ein Ereignis auszulösen, nur wenn eine Taste gedrückt wurde und nicht, während sie gedrückt wird. So mache ich etwas wie folgt aus:Auslösen eines Ereignisses für ein keyPress-Ereignis

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

und dann in einem handleEvents SetTimeout:

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

Verwenden Sie Keydown- oder Keyup-Ereignisse. – Barmar

Antwort

1

Verwendung keydown statt keypress.

Sie haben die folgende Reihenfolge chronologisch:

  • Taste gedrückt Taste drücken Sie die Taste nach oben

$(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

Wenn Sie sich für ein Singleton Art Event suchen (die Event-Handler wird nur einmal ausgeführt), Sie können die jQuery-Funktion .one() verwenden. Dadurch wird die Ereignisbehandlungsroutine nach einmaliger Ausführung automatisch getrennt. Beispiel:

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

* Beachten Sie, dass diese Verwendung auf einem Ereignis keypress Typ nicht ratsam scheint, da der Handler den ersten Durchlauf unabhängig von ungebundenem werden, ob oder nicht die richtige Taste gedrückt wurde.

Es klingt wie Sie möchten, dass Sie Event-Handler nur ausführen, sobald der Benutzer die Taste gedrückt hat. Wie die anderen Kommentare schlage ich vor, entweder das Ereignis 'keydown' oder 'keyup' zu verwenden.

Verwandte Themen