2013-06-30 13 views
5

Ho un problema strano che io non riesco a capire:jQuery pressione di un tasto .VAL() restituisce valore precedente dopo la funzione corre

Questa funzione keydown/pressione di un tasto restituisce solo il valore precedente (cioè prima volta restituisce nulla , la seconda volta torna primo valore, terza volta torna secondo valore, ecc ...)

http://jsfiddle.net/ZRPfb/

qualcuno mi può illuminare sul motivo per cui keydown e pressione del tasto non funzionano, ma Keyu p funziona ??

$(".modal-body #rowDownload").unbind().on('keypress',function(){ 
    var numRows = $(".modal-body #rowDownload").val(); 
    // var numRows = $(this).val(); 
    alert(numRows); 

    if (typeof numRows !== 'number') return; 

}); 
+0

grazie, ma entrambi non funzionano. –

+2

È necessario utilizzare invece 'keyup'. Guarda i documenti per vedere le differenze tra i due. – lifetimes

+1

@Zenith, grazie! in realtà mi sono appena reso conto di questo, ma ero comunque interessato al motivo per cui keypress e keydown non funzionavano –

risposta

6

Questo è il normale comportamento di javascript. La funzione chiamata a pressione del tasto è in esecuzione prima che venga aggiunto il valore stesso.

Lascia che te lo dimostri. Quando esegui .preventDefault() su Keypress, cosa succederà? Il personaggio non verrà inserito. Sarebbe logico che il codice dietro aggiunga il carattere, quindi corri sopra lo preventDefault() e rimuova il personaggio? Io non la penso così, ecco perché la funzione viene eseguita prima di aggiungere il personaggio.

Funzionerà con .keyup() perché il carattere è già stato aggiunto.

Spero che chiarisca un po '!

3

Ho controllato il collegamento. Usa l'evento "keyup". Funziona. Ciò è dovuto a quando si utilizza l'evento keydown o keypress, quindi la funzione evento viene eseguita prima che il valore del tag di input venga aggiornato perché è key-down. Se provi il codice premendo il tasto per un po 'di tempo, vedrai che la funzione viene eseguita immediatamente. Ma su keyup la funzione verrà eseguita dopo che la chiave è stata rilasciata e quindi aggiornata.

Problemi correlati