J'ai eu:
$(someTextInputField).keypress(function() {
alert($(this).val());
});
Maintenant, l'alerte renvoie toujours la valeur AVANT d'appuyer sur la touche (par exemple, le champ est vide, je tape «a» et l'alerte me donne «». Ensuite, je tape «b» et l'alerte me donne «a» ...). Mais je veux la valeur APRÈS la pression de la touche - comment puis-je faire cela?
Contexte: je souhaite activer un bouton dès que le champ de texte contient au moins un caractère. Je lance donc ce test sur chaque événement de pression de touche, mais en utilisant le val () retourné, le résultat est toujours un pas en arrière. L'utilisation de l'événement change () n'est pas une option pour moi car le bouton est désactivé jusqu'à ce que vous quittiez la zone de texte. S'il y a une meilleure façon de faire ça, je suis content de l'entendre!
la source
Réponses:
Changer
keypress
pourkeyup
:keypress
est déclenché lorsque la touche est enfoncée,keyup
est déclenché lorsque la touche est relâchée.la source
Surpris que personne n'ait mentionné l'événement js "input":
Conseillé.
https://developer.mozilla.org/en-US/docs/Web/Events/input
la source
au lieu d' appuyer sur une touche, utilisez keyup .
la source
Vous pouvez également utiliser l'événement keydown avec un timeout de 0.
De cette façon, les modifications seront appliquées instantanément, au lieu d'être appliquées lorsque l'utilisateur cesse de maintenir la touche.
la source
Vous souhaiterez peut-être connecter un
onchange
gestionnaire d'événements au lieu d'utiliser l'un des événements clés.Utiliser
Edit > Paste
ou un clic droit puis coller déclenchera un événement de modification, mais pas un événement clé. Notez que certains navigateurs peuvent simuler un événement clé sur une pâte (bien que je n'en connaisse aucun) mais vous ne pouvez pas compter sur ce comportement.la source
Essayez quelque chose comme ceci:
Cela introduit simplement un délai d'expiration pour qu'après la fin de la boucle d'événement "keypress", votre code s'exécute presque immédiatement après. Un intervalle de minuterie aussi court (même s'il est arrondi par le navigateur) ne sera pas perceptible.
edit - ou vous pouvez utiliser "keyup" comme tout le monde le dit, bien que sa sémantique soit différente.
la source