104 votes

Comment puis-je obtenir jquery .val() APRÈS l'événement keypress?

J'ai eu:

$(someTextInputField).keypress(function() {
  alert($(this).val());
});

Maintenant l'alerte retourne toujours la valeur AVANT que la pression de touche (par exemple, le champ est vide, je tape " a " et le message d'alerte me donne ". Puis j'type " b " et le message d'alerte me donne 'a'...). Mais je veux que la valeur APRÈS la pression de touche - comment puis-je le faire?

Contexte: j'aimerais activer un bouton dès que le champ de texte contient au moins un caractère. Donc, je lance ce test sur chaque événement keypress, mais en utilisant le retour de val (), le résultat est toujours un temps de retard. L'aide de la modifier() de l'événement n'est pas une option pour moi parce que le bouton est désactivé jusqu'à ce que vous laissez la zone de texte. Si il ya une meilleure façon de le faire, je suis heureux d'entendre ça!

153voto

Hooray Im Helping Points 3179

Variation keypress de keyup:

$(someTextInputField).on("keyup", function() {
  alert($(this).val());
});

keypress est déclenché lorsque la touche est enfoncée, keyup est déclenché lorsque la touche est relâchée.

64voto

billynoah Points 456

Surpris que personne n'ait mentionné la js "entrée" de l'événement:

$(someTextInputField).on('input', function() {
  alert($(this).val());
});

Recommandé.

https://developer.mozilla.org/en-US/docs/Web/Events/input

9voto

XIII Points 8731

au lieu de la touche keyup.

Grz, Kris.

5voto

Pointy Points 172438

Essayez quelque chose comme ceci:

$('#someField').keypress(function() {
  setTimeout(function() {
    if ($('#someField').val().length > 0)
      $('#theButton').attr('disabled', false);
  }, 1);
});

modifier — ou être intelligent et utiliser "keyup" comme tout le monde le dit :-)

5voto

David Oliveros Points 443

Alternativement, vous pouvez utiliser l'événement keydown avec un délai d'attente de 0.

De cette façon, les modifications seront appliquées immédiatement, au lieu d'être appliquée lorsque l'utilisateur cesse de détenir la clef.

$(someTextInputField).on("keydown", function() {
  setTimeout(function($elem){
    alert($elem.val());
  }, 0, $(this));
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X