2017-08-09 2 views
-1

Ich möchte überprüfen, mit jQuery, wenn eine Taste gedrückt und dann losgelassen wird. Nur nach der Veröffentlichung möchte ich, dass die Funktion ausgeführt wird (es ist in Ordnung, wenn die einzige Möglichkeit dies nicht mit jQuery zu tun hat, aber wenn es einen Weg für beide gibt, wäre es lieber der mit weniger Bytes).
Ich bin mir ziemlich sicher, dass die Lösung eine Mischung aus keyup() und keydown() oder keypress() Funktionen verwenden würde, aber ich habe nicht herausgefunden, wie Sie sie verketten, so dass der Code die gewünschte Ausgabe erhalten würde. Mein aktueller Code ist:Erkennen, wenn eine Taste gedrückt und dann mit jQuery freigegeben wird

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

Aber das führt zu Zehn key pressed/released Meldungen in der Konsole angemeldet ist, nachdem ich eine Taste loslassen. Das Entfernen von keydown() oder keyup() führt zu key pressed/released Nachrichten, die protokolliert werden, wenn ich eine Taste drücke bzw. wenn ich sie loslasse. keypress() funktioniert auch nicht anstelle von keydown(), keyup(), oder nur für sich. Was soll ich tun, um mein gewünschtes Ergebnis zu erreichen?

+0

Ich muss Ihnen dringend empfehlen [Mausefalle] (https://craig.is/killing/mice) –

+0

* "die mit weniger Bytes" * - meine Sie andere als die jQuery.js Datei selbst ? Also, sagen wir, drei Codezeilen, die jQuery-Methoden aufrufen, plus die gesamte jQuery.js-Bibliothek wären "weniger" als zehn Zeilen Nicht-jQuery-Code? – nnnnnn

+0

@nnnnnn ja, ich meine in meiner Datei selbst. Es ist nicht wirklich wichtig, aber –

Antwort

-1

Nun, Sie können eine Variable, sagen x. x ist falsch. Trennen Sie die Tasten- und Tastenfunktionen. unter keydown addiere ein if (! x) und mache x wahr. Fügen Sie unter keyup ein if (x) hinzu und machen Sie x false. Ich codiere nicht jquery, aber ich dachte, das könnte helfen.

1

Ich möchte überprüfen, mit jQuery, wenn eine Taste gedrückt und dann freigegeben wird.
Erst nach der Veröffentlichung will ich die Funktion

Nun laufen werden, wenn keyup abgefeuert wird, können Sie sicher sein, der Schlüssel wurde sowohl gedrückt und wieder losgelassen, sonst dieses Ereignis nicht ausgelöst würde, so dass wirklich ist alles was du brauchst.

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

oder ohne

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

Der Grund Code Anmeldung Zehn endet, und dann hunderte von Nachrichten, ist, weil Sie Ereignisse innerhalb Ereignishandler binden, das ist ein No-No ist.

0

Der Trick besteht darin, die beiden Funktionen voneinander zu trennen und dann eine Variable zu verwenden, auf die beide Funktionen zugreifen können.

Beginnen Sie damit, dass keine Taste gedrückt wird. Führen Sie in Ihrer keydown() eine Bedingung aus, die überprüft, ob gerade eine Taste gedrückt wird. Indem Sie die key_pressed Variable auf true innerhalb der Bedingung setzen, werden Sie die Bedingung nur einmal auslösen; wenn der Schlüssel ist zuerst gedrückt.

Wenn die Taste losgelassen wird, setzen Sie die Variable zurück auf false, um anzugeben, dass momentan keine Tasten gedrückt werden. Dies ermöglicht Ihnen, eine sekundäre Taste zu drücken, nachdem die erste Taste losgelassen wird, und die bedingte auslösen wieder:

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>

Der Vorteil der es auf diese Weise zu tun, ist, dass Sie in der Lage sind Logik auslösen speziell während der Schlüssel gedrückt wird.

Hoffe, das hilft!:)

+0

Ich bin mir ziemlich sicher, dass Sie von @Confused Soul ninjadiert wurden, aber danke, dass Sie den Code und das Code-Snippet hinzugefügt haben. –

+0

Mann, ich wünschte, ich könnte 2 Antworten akzeptieren ... –

+0

Haha ja, er war sicherlich sehr schnell auf die Post! Er war in der Tat zuerst (mit der entsprechenden Antwort), also kann ich mich nicht wirklich darüber beschweren, dass du seine Antwort über meine akzeptierst :) Aber beachte, dass du, obwohl du zwei Antworten nicht akzeptieren kannst, ** die Wahl ändern kannst eine ausgewählte Antwort (oder sogar "inakzeptabel" eine Antwort vollständig), wenn Sie das Gefühl haben, dass es besser ist. Und wenn Sie einmal 15 Reputation erreicht haben, können Sie jede Antwort (https://stackoverflow.com/help/privileges/vote-up) [** up-vote **] angeben, um anzuzeigen, dass sie hilfreich ist muss nicht der akzeptierte sein :) –

Verwandte Themen