7

Mi chiedevo se fosse possibile ottenere il risultato finale nell'evento keypress? Attualmente, sto usando la keyup perché viene attivato dopo l'utente ha fatto la modifica del testo in un texteara, ma ho scritto un metodo che fa qualcosa di simile utilizzando la libreria Mootools:L'evento keypress JavaScript ottiene il valore finale dell'area di testo

input.addEvent("keypress", function (input) { 
    var previous_result = this.value; 
    var end_result = this.value + input.key; 
}); 

Tuttavia, questo metodo è orribile quando si tratta di chiavi speciali come backspace, o se l'utente sceglie di utilizzare CTRL +un & & Backspace nel qual caso il valore dell'elemento di input non sarebbe "una stringa vuota".

Sono curioso perché ho osservato il motore di ricerca di Google che invia XMLHttpRequest E modifica la pagina prima dello l'evento keyup attivato. Inoltre, l'input che usano riesce a superare il mio problema di rimuovere tutto il testo pur godendo del lusso di keypress.

Grazie!

+0

Utilizzare 'keydown'? –

+0

@ExplosionPills: provato, il valore è in ritardo rispetto al risultato effettivo in 'keydown': < – User2121315

risposta

9

Ciò farlo funzionare:

input.addEvent("keypress", function (input) {  
    setTimeout(function() { 
     input.value // returns the updated value 
    }, 0);  
}); 

Demo online:http://jsfiddle.net/yQQ5P/ (I utilizzare built-in API, come io non so Mootools)

Quindi, si utilizza un zero timeout che funge da rendimento. Ciò fornisce al thread dell'interfaccia utente del browser l'opportunità di aggiornare il valore dell'input.

+0

Whoah, ha appena avvolto il codice con questo e funziona come un incantesimo, hvala puno! – User2121315

Problemi correlati