Je crée une interface Web pour contrôler un petit robot. Les appels Ajax seront effectués sur un clavier, pour démarrer le robot, et le clavier pour l'arrêter. Mon problème est le suivant: lorsqu'une touche est maintenue enfoncée, les événements KeyCap, KeyBack et Keypress semblent continuellement fonctionner. Est-ce que quelqu'un sait d'un moyen d'avoir seulement le feu de clé lorsque la clé est pressée et le clavier enfoncé quand il a été libéré? --edit: J'ai oublié de le mentionner à l'origine mais j'ai essayé d'enregistrer l'état du bouton. Le problème est que les événements de keydown, de keypress et de keyup tirent encore et encore pendant que je maintiens la clef vers le bas.Comment éviter plusieurs événements de montée/descente/de pression de touche lorsque vous maintenez une touche enfoncée?
Répondre
Vous pouvez essayer d'enregistrer l'état de la clé. Lorsque la clé descend, vérifiez si la touche est déjà enfoncée, sinon, démarrez le robot et marquez la touche comme elle a été pressée. Si c'est déjà pressé, ne faites rien. Sur la touche, faire la même chose pour arrêter le robot et marquer la touche comme non pressée.
Lorsque vous démarrez votre robot, supprimez le gestionnaire d'événements de l'événement keypress et ajoutez un gestionnaire d'événements pour l'événement de touche pour arrêter le robot. Lorsque votre événement de touche se déclenche, arrêtez le robot et ajoutez-le à nouveau.
EDIT: En supprimant le gestionnaire d'événements de votre événement keydown. Vous voudrez utiliser les événements keydown et keyup ... pas la touche.
Donc, en gros:
- assigner gestionnaire d'événements keydown
- assign gestionnaire d'événements keyup
- sur keydown, retirez le gestionnaire d'événements keydown et commencer votre robot
- sur keyup, réattribuer la keydown gestionnaire d'événements
Comme vous pouvez le voir à partir de l'édition, le problème est en fait que les événements cycle tout le temps continuellement. Très peu de temps après le déclenchement du clavier, le clavier se déclenche même si la touche physique est maintenue enfoncée. – Rammay
Utilisez-vous une sorte de bibliothèque (dojo, jQuery, etc) pour gérer ces événements? Pourriez-vous partager votre code? – smencer
Je ne peux pas reproduire le problème- Je ne trouve aucun bouton événements lancés à partir du clavier, , peu importe combien de temps je tiens une touche.
Cette méthode est à l'écoute d'un keydown, exécute du code, et attend un clic avant d'écouter un autre keydown.
L'alerte est appelée uniquement sur un fichier.
var A=[], who=// I used a textarea, substititute your own target
who.onkeydown= who.onkeyup= function(e){
e=window.event || e;
var t= e.type, target= e.target || e.srcElement;
A.push(t);
if(t== 'keydown'){
// start robot and stop listening to keydown
target.onkeydown= '';
}
else if(t== 'keyup'){
// stop robot and listen for keydown
target.onkeydown= arguments.callee;
alert(A)
}
}
- 1. Gérer plusieurs événements vous maintenez la touche C fenêtres # forme
- 2. Entrées en SDL (sur une touche enfoncée)
- 3. Mauvaises performances lorsque vous maintenez la touche d'accélération enfoncée pour Annuler
- 4. Détection lorsque la touche Maj est enfoncée
- 5. Détermination de la touche enfoncée
- 6. comment ne pas autoriser plusieurs keystokes reçus à une pression de touche?
- 7. événement de pression de touche en android
- 8. Savoir si une touche est enfoncée, wxPython
- 9. événement de pression de touche dans jQuery
- 10. pression de touche() jquery obtenir un texte
- 11. Mouvement continu lorsqu'une touche est maintenue enfoncée
- 12. Comment vérifier si la touche enfoncée était une touche fléchée dans Java KeyListener?
- 13. Bascule Cursorline on/off avec une pression de touche
- 14. Comment élever un événement de validation d'une pression de touche
- 15. comment arrêter l'événement de pression de touche dans le clavier
- 16. Empêche le déclenchement de l'événement de pression de touche lorsque l'entrée est au point
- 17. comment faire la détection de page html enter touche enfoncée?
- 18. Comment intercepter une touche dure enfoncée dans un service?
- 19. Comment vérifier si une touche a été enfoncée sous Linux?
- 20. Déclenchez une pression sur une touche avec jQuery ... et spécifiez quelle touche a été pressée
- 21. La touche de détection de touche est enfoncée sans utiliser d'événements dans Windows Forms?
- 22. Manipulation longue pression de touche dans Android 1.5
- 23. Événement de touche de pression en deux étapes sur MenuStrip
- 24. C# Comment désactiver une touche
- 25. Problème de tampon de pression de touche JavaScript
- 26. Comment savoir quelle touche de caractère est enfoncée?
- 27. Comment détecter l'état enfoncé de la touche shift lorsque vous déplacez la souris
- 28. Pouvez-vous obtenir un événement de pression de touche pour la touche d'appel téléphonique dans Flash Lite?
- 29. Transmettre l'événement de touche enfoncée à l'applet et l'arrêter propagation
- 30. Touche de saisie enfoncée avec le clavier virtuel dans Android?
Quel (s) navigateur (s) utilisez-vous lorsque vous obtenez ce comportement? –
Je l'ai essayé à la fois dans Chrome et Firefox – Rammay