Jak Mogę dostać jquery.val () po zdarzeniu keypress?
Mam:
$(someTextInputField).keypress(function() {
alert($(this).val());
});
Teraz alert zawsze zwraca wartość przed naciśnięciem klawisza (np. pole jest puste, wpisuję 'a' i alert daje mi ". Potem wpisuję " b "i alarm daje mi "a"...). Ale chcę wartość po naciśnięciu klawisza-Jak mogę to zrobić ?
Tło: chcę włączyć przycisk, gdy tylko pole tekstowe zawiera co najmniej jeden znak. Więc uruchamiam ten test na każdym zdarzeniu klawiatury, ale używając zwracanej val() wynik jest zawsze o krok w tył. Korzystanie z Zdarzenie change () nie jest dla mnie opcją, ponieważ wtedy przycisk jest wyłączony, dopóki nie opuścisz pola tekstowego. Jeśli jest na to lepszy sposób, to cieszę się, że to słyszę!
6 answers
Zmień keypress
na keyup
:
$(someTextInputField).on("keyup", function() {
alert($(this).val());
});
keypress
jest wywoływane po naciśnięciu klawisza, {[2] } jest wywoływane po zwolnieniu klawisza.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-24 14:29:18
Dziwne, że nikt nie wspomniał o zdarzeniu js "input":
$(someTextInputField).on('input', function() {
alert($(this).val());
});
Zalecane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-07 00:50:10
Zamiast klawiatury użyj keyup.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-24 15:56:19
Alternatywnie można użyć zdarzenia keydown z timeoutem równym 0.
W ten sposób zmiany zostaną zastosowane natychmiast, zamiast być zastosowane, gdy użytkownik przestanie trzymać klucz.
$(someTextInputField).on("keydown", function() {
setTimeout(function($elem){
alert($elem.val());
}, 0, $(this));
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-26 04:07:19
Możesz chcieć podłączyć obsługę zdarzenia onchange
zamiast używać któregokolwiek z kluczowych zdarzeń.
$(someTextInputField).change(function() {
alert($(this).val());
});
Użycie Edit > Paste
lub kliknięcie prawym przyciskiem myszy i wklej spowoduje wywołanie zdarzenia zmiany, ale nie zdarzenia kluczowego. Uwaga niektóre przeglądarki mogą symulować kluczowe Zdarzenie na wklejce (choć nie znam żadnego), ale nie można liczyć na Takie zachowanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-17 16:49:41
Spróbuj czegoś takiego:
$('#someField').keypress(function() {
setTimeout(function() {
if ($('#someField').val().length > 0)
$('#theButton').attr('disabled', false);
}, 1);
});
To po prostu wprowadza limit czasu, tak że po zakończeniu pętli zdarzenia" klawiatura", kod zostanie uruchomiony niemal natychmiast po tym. Tak krótki interwał czasowy (nawet jeśli zaokrąglony przez przeglądarkę) nie będzie zauważalny.
edit - albo ty możesz użyć "keyup", jak wszyscy mówią, choć jego semantyka jest inna.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-01 14:28:08