2009-09-11 14 views
28

Chcę funkcją być uruchamiany w przypadku wystąpienia przyciśnięcie na polu tekstowym, więc mam ten kod:jquery przyciśnięcie() zdarzenie uzyskać tekst

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

to działa dobrze, ale w mojej funkcji chcę coś zrobić w oparciu o wartość tekstu w polu tekstowym

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

teraz problemem jest to, że nie nadąża za pomocą klucza, więc jeśli moje pole tekstowe mówi „on” i wpisać „l”, a następnie chcę moja wartość to "Hel", ale zwraca poprzednią wartość "He", ponieważ prawdopodobnie postać nie została jeszcze umieszczona w polu tekstowym.

Czy istnieje sposób na odzyskanie funkcji "Hel" z mojej funkcji?

Dzięki :)

Odpowiedz

51

Można spróbować użyć keyup zdarzenie:

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

Zastosowanie onkeyup, to pokaże właściwą wartość.

27

jeśli utkniesz przy użyciu keypressed z jakiegoś innego powodu (więc nie można zmienić keyUp jak sugerowano), a następnie można uzyskać ostatni wpisany znak jak to:

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

'("input [x]") val()' powinno być. '$ ("Input [x]") val()' lub nawet lepiej. '$ (This) .val() 'lub nawet lepiej:' this.value' –

+0

@Oleg G Dzięki. –

+6

Słowo ostrzeżenia po napotkaniu problemów z tym podejściem - zakłada, że ​​kursor znajduje się zawsze na końcu tekstu pola tekstowego. Na przykład, jeśli wpiszesz E-S-T-Home-T, w normalnym oknie edytora pojawi się "TEST", ale ten JS spowoduje "ESTT". –

0

Użyj funkcji setTimeout bez opóźnień. Uruchomi się natychmiast po zakończeniu zdarzenia keypress, dzięki czemu będziesz mieć poprawną wartość wejścia.

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