Mam następującą funkcję:
$(document).ready(function() {
$("#dSuggest").keypress(function() {
var dInput = $('input:text[name=dSuggest]').val();
console.log(dInput);
$(".dDimension:contains('" + dInput + "')").css("display","block");
});
});
Z jakiegoś powodu, przy pierwszym naciśnięciu klawisza, otrzymuję pusty ciąg znaków do dziennika konsoli.
jquery
jquery-events
Albo Weinberger
źródło
źródło
input
typu zdarzenia.Zdając sobie sprawę, że jest to dość stary post, i tak udzielę odpowiedzi, ponieważ zmagałem się z tym samym problemem.
Zamiast tego należy użyć
"input"
zdarzenia i zarejestrować się przy użyciu.on
metody. Jest to szybkie - bez opóźnieńkeyup
i rozwiązuje brakujący ostatni problem związany z naciśnięciem klawisza, który opisujesz.Demo tutaj
źródło
Użyj
.keyup
zamiast naciśnięcia klawisza.Użyj
$(this).val()
lub po prostu,this.value
aby uzyskać dostęp do bieżącej wartości wejściowej.DEMO tutaj
Informacje o
.keypress
z jQuery Docs,źródło
keyup
jest zbyt wolny, a klawisz można nacisnąć i przytrzymać bez zwolnienia i coś musi się wydarzyć. lepiej używaćkeydown
z niewielkim limitem czasu, więc wartość faktycznie się zmienia.Musisz przerwać wątek wykonawczy, aby umożliwić aktualizację danych wejściowych.
źródło
keyup
opóźnienie jest zbyt wolne do niektórych celów, a także nie powoduje automatycznego filtrowania klawiszy modyfikujących. To faktycznie działa lepiej dla mnie.Dzieje się tak, ponieważ
Keypress
zdarzenie jest uruchamiane przed dodaniem nowej postaci. Zamiast tego użyj zdarzenia „keyup”, które będzie działać idealnie w Twojej sytuacji.Chcę do tego dodać, jeśli masz wiele pól tekstowych i musisz zrobić to samo na ich zdarzeniu keyup, możesz po prostu nadać im wspólną klasę css (np. Commoncss) i zastosować takie zdarzenie keyup.
znacznie zmniejszy to ilość kodu, ponieważ nie musisz stosować zdarzenia keyup według identyfikatora dla każdego pola tekstowego.
źródło
Szukałem przykładu ES6 (aby mógł przejść przez mój linter) Więc dla innych osób, które szukają tego samego:
Użyłbym również keyup, ponieważ otrzymujesz bieżącą wartość, która jest wypełniona.
źródło
Po prostu użyj limitu czasu, aby wykonać połączenie; limit czasu zostanie wywołany po zakończeniu stosu zdarzeń (tj. po wywołaniu domyślnego zdarzenia)
źródło
Myślę, że potrzebujesz poniższego prototypu
źródło
jQuery pobiera wartość wejściową po naciśnięciu klawisza
https://www.tutsmake.com/jquery-keypress-event-detect-enter-key-pressed/
źródło