2009-09-11 5 views
28

Je veux une fonction à exécuter lorsqu'une touche est pressée sur une zone de texte, donc je dois ce code:pression de touche() jquery obtenir un texte

$("input[x]").keypress(function() { 
     DoX(); 
    }) 

Cela fonctionne très bien, mais dans ma fonction je veux de faire quelque chose en fonction de la valeur de texte dans la zone de texte

var textValue = ("input[x]").val(); 

maintenant, le problème est ici qu'il est en retard par une clé, donc si ma boîte de texte dit « il » et je tape un « l », je veux mon textValue doit être 'Hel', mais il retourne la valeur précédente 'He' parce que le caractère n'a probablement pas encore été placé dans la zone de texte.

Existe-t-il un moyen de sortir 'Hel' de ma fonction ici?

Merci :)

Répondre

51

Vous pouvez essayer d'utiliser l'événement KeyUp:

$(selector).keyup(function() { 
    var textValue = $(this).val(); 
    DoX(); 
}); 
9

Utilisez onkeyup, il affichera la bonne valeur.

27

si vous êtes coincé à l'aide du keyPressed pour une autre raison (vous ne pouvez pas changer à keyUp comme suggéré), vous pouvez obtenir le dernier caractère tapé comme this:

$("input[x]").keypress(function (e) { 
    var c = String.fromCharCode(e.which); 
    //process the single character or 
    var textValue = $("input[x]").val(); 
    var fulltext = textValue + c; 
    //process the full text 

}); 
+2

'("entrée [x]") val()' doit être:. '$ ("Entrée [x]") val()' ou mieux encore:. '$ (This) .val() 'ou mieux:' this.value' –

+0

@Oleg G Merci. –

+6

Un mot d'avertissement après avoir rencontré des problèmes avec cette approche - il suppose que le curseur est toujours à la fin du texte de la zone de texte. Par exemple, si vous tapez E-S-T-Home-T, dans une fenêtre d'édition normale, vous obtiendrez "TEST", mais ce JS donnera "ESTT". –

0

Utilisez setTimeout sans délai. Il fonctionnera immédiatement après la fin de l'événement keypress, vous aurez donc la valeur correcte de l'entrée.

$("input[x]").keypress(function() { 
    setTimeout(DoX); 
}); 
Questions connexes