Najlepszy sposób na śledzenie onchange podczas wpisywania w input type = "text"?
Z mojego doświadczenia, input type="text"
onchange
Zdarzenie zwykle występuje dopiero po opuszczeniu (blur
) kontrolki.
Czy istnieje sposób, aby zmusić przeglądarkę do wyzwalania onchange
za każdym razem, gdy textfield
zmienia się zawartość? Jeśli nie, to jaki jest najbardziej elegancki sposób śledzenia tego "ręcznie"?
Używanie zdarzeń onkey*
nie jest wiarygodne, ponieważ można kliknąć prawym przyciskiem myszy pole i wybrać opcję Wklej, co spowoduje zmianę pola bez wprowadzania klawiatury.
Czy setTimeout
jest jedynym sposobem?.. Brzydki: -)
17 answers
Aktualizacja:
Zobacz kolejna odpowiedź (2015).
Oryginał 2009 Odpowiedź:
Więc chcesz, aby onchange
event odpalił na keydown, blur, i wklej? To magia.
Jeśli chcesz śledzić zmiany podczas ich wpisywania, użyj "onkeydown"
. Jeśli chcesz przechwycić operacje wklejania za pomocą myszki, użyj "onpaste"
(IE, FF3) oraz "oninput"
(FF, Opera, Chrome, Safari1).
1złamane na <textarea>
na Safari. Użycie textInput
zamiast
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
2017-05-23 11:54:59
These days listen for oninput
. It feels like onchange
bez konieczności utraty skupienia na elemencie. Jest to HTML5.
Jest obsługiwany przez wszystkich (nawet mobilnych), z wyjątkiem IE8 i poniżej. Dla IE dodaj onpropertychange
. Używam go tak:
const source = document.getElementById('source');
const result = document.getElementById('result');
const inputHandler = function(e) {
result.innerHTML = e.target.value;
}
source.addEventListener('input', inputHandler);
source.addEventListener('propertychange', inputHandler); // for IE8
// Firefox/Edge18-/IE9+ don’t fire on <select><option>
// source.addEventListener('change', inputHandler);
<input id="source">
<div id="result"></div>
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
2020-03-30 00:36:13
Poniższy kod działa mi dobrze z Jquery 1.8.3
HTML: <input type="text" id="myId" />
Javascript / JQuery:
$("#myId").on('change keydown paste input', function(){
doSomething();
});
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-03-21 17:54:19
Javascript jest tutaj nieprzewidywalny i zabawny.
-
onchange
występuje tylko wtedy, gdy rozmyjesz pole tekstowe -
onkeyup
&onkeypress
nie zawsze występuje przy zmianie tekstu -
onkeydown
występuje przy zmianie tekstu (ale nie można śledzić wycinania i wklejania za pomocą kliknięcia myszką) -
onpaste
&oncut
występuje z naciśnięciem klawisza, a nawet kliknięciem prawym przyciskiem myszy.
Więc, aby śledzić zmiany w textboxie, musimy onkeydown
, oncut
i onpaste
. W wywołaniu zwrotnym tego zdarzenia, Jeśli zaznaczysz wartość pole tekstowe nie otrzymasz zaktualizowanej wartości, ponieważ wartość jest zmieniana po wywołaniu zwrotnym. Tak więc rozwiązaniem jest ustawienie funkcji timeout z timeoutem 50 mili-sekund (lub może być krótszy), aby śledzić zmianę.
To jest brudny hack, ale to jedyny sposób, jak zbadałem.
Oto przykład. http://jsfiddle.net/2BfGC/12/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-07-05 06:51:52
onkeyup
dzieje się po wpisaniu na przykład i nacisnąć t
gdy unoszę palec akcja dzieje się, ale na keydown
akcja dzieje się, zanim cyfra znak t
Mam nadzieję, że to jest pomocne dla kogoś.
Więc onkeyup
jest lepsze, gdy chcesz wysłać to, co właśnie wpisałeś.
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-02-26 14:11:33
Myślę, że w 2018 roku lepiej będzie wykorzystać wydarzenie input
.
-
Jak opisuje Specyfikacja WHATWG ( https://html.spec.whatwg.org/multipage/indices.html#event-input-input):
Wywołane w kontrolkach, gdy użytkownik zmienia wartość (Zobacz też zmiana zdarzenia )
-
Oto przykład jak z niego korzystać:
<input type="text" oninput="handleValueChange()">
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
2018-06-19 09:28:56
Miałem podobny wymóg(pole tekstowe w stylu Twittera). Używane onkeyup
i onchange
. onchange
zajmuje się operacjami wklejania myszy podczas utraty ostrości z pola.
[Update] w HTML5 lub nowszym, użyj oninput
, aby uzyskać aktualizacje modyfikacji znaków w czasie rzeczywistym, jak wyjaśniono w innych odpowiedziach powyżej.
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
2015-08-11 13:55:58
Jeśli używasz tylko Internet Explorer, możesz użyć tego:
<input type="text" id="myID" onpropertychange="TextChange(this)" />
<script type="text/javascript">
function TextChange(tBox) {
if(event.propertyName=='value') {
//your code here
}
}
</script>
Mam nadzieję, że to pomoże.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-05-19 10:52:32
Jest dość bliskie rozwiązanie (nie naprawiaj wszystkich sposobów wklejania), ale większość z nich:
Działa zarówno dla wejść, jak i dla tekstów:
<input type="text" ... >
<textarea ... >...</textarea>
Zrób tak:
<input type="text" ... onkeyup="JavaScript: ControlChanges()" onmouseup="JavaScript: ControlChanges()" >
<textarea ... onkeyup="JavaScript: ControlChanges()" onmouseup="JavaScript: ControlChanges()" >...</textarea>
Jak już mówiłem, nie wszystkie sposoby wklejania zdarzenia fire na wszystkich przeglądarkach... najgorsze niektórzy nie odpalają żadnego zdarzenia w ogóle, ale zegary są straszne, aby być używane do takich.
Ale większość sposobów wklejania odbywa się za pomocą klawiatury i / lub myszy, więc zwykle onkeyup lub onmouseup są uruchamiane po wklejeniu, również onkeyup jest uruchamiany podczas pisania na klawiaturze.
Upewnij się, że Twój kod kontrolny nie zajmuje dużo czasu... w przeciwnym razie użytkownik dostaje słabe impresion.
Tak, sztuczka polega na strzelaniu na klawiszu i myszy... ale uważaj oba mogą być zwolnione, więc weź pod uwagę takie!!!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-03-29 09:20:44
Proszę, oceń następne podejście używając JQuery:
HTML:
<input type="text" id="inputId" />
Javascript (JQuery):
$("#inputId").keyup(function(){
$("#inputId").blur();
$("#inputId").focus();
});
$("#inputId").change(function(){
//do whatever you need to do on actual change of the value of the input field
});
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
2013-02-08 17:31:35
"wejście" zadziałało.
var searchBar = document.getElementById("searchBar");
searchBar.addEventListener("input", PredictSearch, false);
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
2015-01-19 19:54:40
Możesz użyć keydown
, keyup
i keypress
wydarzenia, jak również.
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
2009-02-22 13:49:41
Aby śledzić każdy spróbuj tego przykładu, a wcześniej całkowicie zmniejszyć szybkość mrugania kursora do zera.
<body>
//try onkeydown,onkeyup,onkeypress
<input type="text" onkeypress="myFunction(this.value)">
<span> </span>
<script>
function myFunction(val) {
//alert(val);
var mySpan = document.getElementsByTagName("span")[0].innerHTML;
mySpan += val+"<br>";
document.getElementsByTagName("span")[0].innerHTML = mySpan;
}
</script>
</body>
Onblur: Zdarzenie generuje przy wyjściu
Onchange: Zdarzenie generuje przy wyjściu, jeśli zostaną wprowadzone zmiany w inputtext
Onkeydown: Zdarzenie generuje przy każdym naciśnięciu klawisza (również dla długiego trzymania klawisza)
Onkeyup: Zdarzenie generuje przy każdym wydaniu klucza
Onkeypress: taki sam jak onkeydown (lub onkeyup), ale nie reaguje na ctrl, backsace, alt inne
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
2015-04-01 21:24:07
2018 tutaj, to jest to, co robię:
$(inputs).on('change keydown paste input propertychange click keyup blur',handler);
Jeśli możesz wskazać wady w tym podejściu, byłbym wdzięczny.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
2018-04-15 23:32:01
Metoda 1: Dodaj detektor zdarzeń dla input
:
element.addEventListener("input", myFunction);
Metoda 2: Zdefiniuj właściwość oninput
za pomocą JavaScript:
element.oninput = function()
{
myFunction();
};
Metoda 3: Zdefiniuj właściwość oninput
za pomocą HTML:
<input type="text" oninput="myFunction();">
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
2019-11-05 04:06:31
Użyj oninput
zamiast onchange
.
Indeks.html
<html>
<head>
<title>title here</title>
<script src="index.js"></script>
</head>
<body>
<input oninput="onclickhandler(this)"></input>
</body>
</html>
Skrypt.js
function onclickhandler(e) {
console.log(e.value);
}
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
2021-01-15 05:05:24
Robert Siemer addEventListener nie jest obsługiwany w IE8 .
" starsze wersje IE wspierały równoważny, zastrzeżony EventTarget.metoda attachEvent ()." https://developer.mozilla.org/it/docs/Web/API/Element/addEventListener
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
2019-08-17 05:30:00