2009-09-11 20 views
28

voglio una funzione da eseguire quando si verifica pressione di un tasto su una casella di testo, quindi non ho questo codice:jquery pressione di un tasto() evento ottiene testo

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

Questo sta lavorando bene, ma nella mia funzione voglio di fare qualcosa in base al valore del testo nella casella di testo

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

Ora il problema qui è che è in ritardo rispetto da una chiave, quindi se la mia casella di testo dice 'si' e io digitare un 'l', allora voglio il mio valore testo è 'Hel', ma restituisce il valore precedente 'He' perché presumibilmente il carattere non è stato ancora inserito nella casella di testo.

C'è un modo per far uscire "Hel" dalla mia funzione qui?

Grazie :)

risposta

51

Si può provare a utilizzare l'evento KeyUp:

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

Usa onkeyup, mostrerà il giusto valore.

27

se sei bloccato con il keyPressed per qualche altro motivo (quindi non è possibile modificare a keyup come suggerito) allora si può ottenere l'ultimo carattere digitato come questo:

$("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

'("ingresso [x]") val()' deve essere:. '$ ("Ingresso [x]") val()' o, meglio ancora:. '$ (This) .VAL() 'o anche meglio:' this.value' –

+0

@Oleg G Grazie. –

+6

Una parola di avvertimento dopo che mi sono imbattuto in problemi con questo approccio - presuppone che il cursore si trovi sempre alla fine del testo della casella di testo. Ad esempio, se si digita E-S-T-Home-T, in una normale finestra di editor si ottiene "TEST", ma questo JS risulterà in "ESTT". –

0

Usa setTimeout senza ritardo. Verrà eseguito immediatamente dopo il completamento dell'evento di keypress, in modo da avere il valore corretto dell'input.

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