2013-06-30 9 views
5

ich ein seltsames Problem, dass ich nicht scheinen, um herauszufinden kann:jQuery keypress .val() gibt vorherigen Wert nach Funktion läuft

Diese keydown/keypress Funktion gibt nur den vorherigen Wert (dh erstes Mal gibt nichts zurück , zum zweiten Mal kehrt ersten Wert, drittes Mal kehrt zweiter Wert, etc ...)

http://jsfiddle.net/ZRPfb/

mich jemand, warum keydown und keypress arbeitet nicht, aber Keyu aufklären p funktioniert?

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

danke, aber beide funktionieren nicht. –

+2

Sie müssen stattdessen 'keyup' verwenden. Überprüfen Sie die Dokumente, um die Unterschiede zwischen den beiden zu sehen. – lifetimes

+1

@Zenith danke! Ich habe das gerade erst realisiert, war aber immer noch daran interessiert, warum Keypress und Keydown nicht funktionierten –

Antwort

6

Dies ist das normale Verhalten von Javascript. Die Funktion, die Sie bei Tastendruck aufrufen, wird ausgeführt, bevor der Wert selbst hinzugefügt wird.

Lassen Sie mich es Ihnen demonstrieren. Wenn Sie .preventDefault() auf Tastendruck tun, was passiert? Das Zeichen wird nicht eingefügt. Wäre es logisch, dass der Code dahinter das Zeichen hinzufügt, dann über preventDefault() läuft und das Zeichen entfernt? Ich denke nicht, deshalb läuft die Funktion vor dem Hinzufügen des Charakters.

Es funktioniert mit .keyup(), weil das Zeichen bereits hinzugefügt wurde.

Hoffe, dass Sie ein wenig klären!

3

Ich habe den Link überprüft. Verwenden Sie das Ereignis "keyup". Es klappt. Dies liegt daran, dass bei Verwendung des Keydown- oder Keypress-Ereignisses die Ereignisfunktion ausgeführt wird, bevor der Wert des Eingabe-Tags aktualisiert wird, da es sich um Keydown handelt. Wenn Sie den Code versuchen, indem Sie die Taste für einige Zeit drücken, wird die Funktion sofort ausgeführt. Aber auf Keyup wird die Funktion ausgeführt, nachdem der Schlüssel freigegeben und aktualisiert wurde.