Z mojego doświadczenia wynika, że input type="text"
onchange
zdarzenie zwykle występuje tylko po pozostawieniu blur
kontroli ( ).
Czy istnieje sposób, aby zmusić przeglądarkę do uruchamiania przy onchange
każdej textfield
zmianie treści? Jeśli nie, jaki jest najbardziej elegancki sposób śledzenia tego „ręcznie”?
Korzystanie ze onkey*
zdarzeń nie jest niezawodne, ponieważ można kliknąć pole prawym przyciskiem myszy i wybrać opcję Wklej, a to zmieni pole bez wprowadzania danych z klawiatury.
Czy setTimeout
to jedyny sposób? .. Brzydki :-)
javascript
html
forms
Ilya Birman
źródło
źródło
Odpowiedzi:
Aktualizacja:
Zobacz inną odpowiedź (2015).
Oryginalna odpowiedź z 2009 r .:
Czy chcesz, aby
onchange
wydarzenie było uruchamiane podczas keydown, rozmycia i wklejania? To magia.Jeśli chcesz śledzić zmiany podczas ich pisania, użyj
"onkeydown"
. Jeśli chcesz przechwycić operacje wklejania za pomocą myszy, użyj"onpaste"
( IE , FF3 ) i"oninput"
( FF, Opera, Chrome, Safari 1 ).1 Złamane
<textarea>
na Safari. UżyjtextInput
zamiast tegoźródło
onkeypress
należy użyć zamiastonkeydown
.onkeydown
odpala po kliknięciu klawisza. Jeśli użytkownik przytrzyma klawisz, zdarzenie zostanie uruchomione tylko raz dla pierwszego znaku.onkeypress
uruchamia się, gdy do pola tekstowego zostanie dodany znakonchange
wszystkich tych działań nie jest magiczne .<input onchange="doSomething();" onkeypress="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();">
poradzi sobie najlepiej dla większości.$().on('change keydown paste input', function() {})
Te dni nasłuchują
oninput
. Wydaje się, żeonchange
nie trzeba tracić skupienia na elemencie. To jest HTML5.Jest obsługiwany przez wszystkich (nawet na urządzeniach mobilnych), z wyjątkiem IE8 i niższych. Do IE dodaj
onpropertychange
. Używam tego w ten sposób:źródło
oninput
nawet w IE9 jest jednak częściowe ( caniuse.com/#feat=input-event ).innerText
zamiast tegoinnerHTML
, aby żadne znaczniki nie były renderowanePoniższy kod działa dobrze dla mnie z Jquery 1.8.3
HTML:
<input type="text" id="myId" />
JavaScript / JQuery:
źródło
keydown
ponieważ spowoduje to zduplikowanie wartości danych wejściowych, usuń ją.JavaScript jest tutaj nieprzewidywalny i zabawny.
onchange
występuje tylko po rozmyciu pola tekstowegoonkeyup
ionkeypress
nie zawsze występuje przy zmianie tekstuonkeydown
występuje po zmianie tekstu (ale nie można śledzić wycinania i wklejania za pomocą kliknięcia myszy)onpaste
ioncut
występuje po naciśnięciu klawisza, a nawet kliknięciu prawym przyciskiem myszy.Tak więc, aby śledzić zmiany w polu tekstowym, musimy
onkeydown
,oncut
ionpaste
. W przypadku wywołania zwrotnego tego zdarzenia, jeśli zaznaczysz wartość pola tekstowego, nie otrzymasz zaktualizowanej wartości, ponieważ wartość jest zmieniana po wywołaniu zwrotnym. Rozwiązaniem tego problemu jest ustawienie funkcji limitu czasu z limitem 50 miliardów sekund (lub mniejszym) w celu śledzenia zmiany.To brudny hack, ale to jedyny sposób, jak badałem.
Oto przykład. http://jsfiddle.net/2BfGC/12/
źródło
oninput
itextInput
są to zdarzenia, które są faktycznym rozwiązaniem tego problemu, ale nie jest obsługiwane przez wszystkie przeglądarki.onkeyup
ionkeydown
które są podobne. Oba mogą przechwytywać klawisze Ctrl, Alt, Shift i Meta. Jeśli chodzi o trzeci punkt, zakładam, że miałeś na myślionkeypress
.onkeyup
dzieje się po tym, jak piszesz, na przykład naciskam,t
kiedy podnoszę palec, dzieje się, alekeydown
akcja następuje przed cyfrowaniem znakut
Mam nadzieję, że jest to pomocne dla kogoś.
onkeyup
Lepiej więc, gdy chcesz wysłać to, co właśnie napisałeś.źródło
Miałem podobne wymaganie (pole tekstowe w stylu Twittera). Używane
onkeyup
ionchange
.onchange
faktycznie zajmuje się operacjami wklejania myszy podczas utraty ostrości z pola.[Aktualizacja] W HTML5 lub nowszym użyj,
oninput
aby uzyskać aktualizacje modyfikacji znaków w czasie rzeczywistym, jak wyjaśniono w innych odpowiedziach powyżej.źródło
oninput
to droga. Ale kiedy zaimplementowałem, HTML5 nie istniał i mieliśmy IE 8 :(. Doceniam twoją aktualizację, ponieważ zawiera aktualne informacje dla użytkowników.Myślę, że w 2018 roku lepiej skorzystać z
input
wydarzenia.-
Jak opisuje specyfikacja WHATWG ( https://html.spec.whatwg.org/multipage/indices.html#event-input-input ):
-
Oto przykład, jak go używać:
źródło
Jeśli używasz TYLKO Internet Explorera, możesz użyć tego:
Mam nadzieję, że to pomaga.
źródło
istnieje dość bliskie rozwiązanie (nie naprawiaj wszystkich sposobów wklejania), ale większość z nich:
Działa dla danych wejściowych, a także dla obszarów tekstowych:
Rób jak to:
Jak powiedziałem, nie wszystkie sposoby wklejania odpalają zdarzenie we wszystkich przeglądarkach ... najgorsze, że niektóre nie uruchamiają żadnego zdarzenia, ale Timery są straszne do takiego użycia.
Ale większość sposobów wklejania odbywa się za pomocą klawiatury i / lub myszy, więc zwykle klawisz onkeyup lub onmouseup są uruchamiane po wklejeniu, również klawisz onkeyup jest uruchamiany podczas pisania na klawiaturze.
Upewnij się, że kod kontrolny nie zajmuje dużo czasu ... w przeciwnym razie użytkownik uzyska słabe wrażenie.
Tak, sztuczka polega na strzelaniu do klawisza i myszy ... ale uwaga, oba można odpalić, więc weź pod uwagę takie !!!
źródło
Oceń następne podejście za pomocą JQuery:
HTML:
JavaScript (JQuery):
źródło
„wejście” działało dla mnie.
źródło
Można użyć
keydown
,keyup
ikeypress
wydarzeń, jak również.źródło
Aby śledzić każdy, wypróbuj ten przykład, a wcześniej całkowicie zmniejsz częstotliwość migania kursora do zera.
onblur: zdarzenie generuje przy wyjściu
onchange: zdarzenie generuje przy wyjściu, jeśli zostaną wprowadzone jakiekolwiek zmiany w tekście wejściowym
onkeydown: zdarzenie generuje się po każdym naciśnięciu klawisza (również dla długiego przytrzymania klawisza)
onkeyup: zdarzenie generowane jest przy każdym wydaniu klucza
onkeypress: to samo co onkeydown (lub onkeyup), ale nie reaguje na ctrl, backsace, alt other
źródło
2018 tutaj, oto co robię:
Byłbym wdzięczny za wskazanie wad tego podejścia.
źródło
Metoda 1: Dodaj detektor zdarzeń dla
input
:Metoda 2: Zdefiniuj
oninput
właściwość za pomocą JavaScript:Metoda 3: Zdefiniuj
oninput
właściwość za pomocą HTML:źródło
Robert Siemer addEventListener nie jest obsługiwany w IE8.
„Starsze wersje IE obsługiwały równoważną, zastrzeżoną metodę EventTarget.attachEvent ().” https://developer.mozilla.org/it/docs/Web/API/Element/addEventListener
źródło