По моему опыту, input type="text"
onchange
событие обычно происходит только после вашего ухода (blur
) элемент управления.
Есть ли способ заставить браузер запускать onchange
каждый раз при textfield
изменении содержимого? Если нет, то какой самый элегантный способ отследить это «вручную»?
С помощью onkey*
событий не является надежным, так как вы можете щелкнуть правой кнопкой мыши поле и выбрать Вставить, и это изменит поле без ввода с клавиатуры.
Это setTimeout
единственный способ? .. Гадкий :-)
javascript
html
forms
Илья Бирман
источник
источник
Ответы:
Обновить:
Смотрите другой ответ (2015).
Оригинал 2009 Ответ:
Итак, вы хотите, чтобы
onchange
событие запускалось при нажатии клавиш, размытии и вставке? Это волшебство.Если вы хотите отслеживать изменения по мере их ввода, используйте
"onkeydown"
. Если вам нужно перехватить операции вставки с помощью мыши, используйте"onpaste"
( IE , FF3 ) и"oninput"
( FF, Opera, Chrome, Safari 1 ).1 Сломан для
<textarea>
сафари. ИспользуйтеtextInput
вместоисточник
onkeypress
следует использовать вместоonkeydown
.onkeydown
срабатывает при нажатии клавиши. Если пользователь удерживает клавишу, событие будет запущено только один раз для первого символа.onkeypress
срабатывает всякий раз, когда символ добавляется в текстовое поле.onchange
поджечь все эти действия.<input onchange="doSomething();" onkeypress="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();">
будет достаточно хорошо для большинства.$().on('change keydown paste input', function() {})
В эти дни слушай
oninput
. Такое ощущение, чтоonchange
нет необходимости терять фокус на элементе. Это HTML5.Он поддерживается всеми (даже мобильными), кроме IE8 и ниже. Для IE добавить
onpropertychange
. Я использую это так:источник
oninput
даже в IE9 хотя и частичная ( caniuse.com/#feat=input-event ).innerText
вместоinnerHTML
так, чтобы любая разметка не отображаласьНиже код отлично работает для меня с Jquery 1.8.3
HTML:
<input type="text" id="myId" />
Javascript / JQuery:
источник
keydown
потому что он будет дублировать значение ввода, удалите его.Javascript здесь непредсказуем и забавен.
onchange
происходит только при размытии текстового поляonkeyup
&onkeypress
не всегда происходит при изменении текстаonkeydown
происходит при изменении текста (но не может отслеживать вырезать и вставить с помощью мыши)onpaste
&oncut
происходит при нажатии клавиш и даже при щелчке правой кнопкой мыши.Итак, чтобы отслеживать изменения в текстовом поле, нам нужно
onkeydown
,oncut
иonpaste
. При обратном вызове этого события, если вы проверите значение текстового поля, вы не получите обновленное значение, так как значение изменяется после обратного вызова. Таким образом, решение для этого состоит в том, чтобы установить функцию тайм-аута с тайм-аутом 50 миллисекунд (или может быть меньше), чтобы отслеживать изменения.Это грязный взлом, но это единственный способ, как я исследовал.
Вот пример. http://jsfiddle.net/2BfGC/12/
источник
oninput
иtextInput
являются событиями, которые являются фактическим решением для этого, но не поддерживаются всеми браузерами.onkeyup
иonkeydown
, которые похожи. Оба могут захватывать клавиши Ctrl, Alt, Shift и Meta. Для третьего пункта пули я предполагаю, что вы имели в видуonkeypress
.onkeyup
происходит после того, как вы наберете, например, я нажимаю,t
когда я поднимаю палец, действие происходит, но наkeydown
действие происходит, прежде чем я оцифровываю символt
Надеюсь, это полезно для кого-то.
Так
onkeyup
что лучше, когда вы хотите отправить то, что вы только что набрали.источник
У меня было похожее требование (текстовое поле в стиле твиттера). Используется
onkeyup
иonchange
.onchange
фактически заботится об операциях вставки мыши во время потери фокуса с поля.[Обновление] В HTML5 или новее используйте
oninput
для получения обновлений модификации символов в реальном времени, как объяснено в других ответах выше.источник
oninput
это путь. Но когда я реализовал, HTML5 не существовало, и у нас был IE 8 :(. Я ценю ваше обновление, поскольку оно предоставляет актуальную информацию для пользователей.Я думаю, что в 2018 году лучше использовать
input
событие.-
Как описывает спецификация WHATWG ( https://html.spec.whatwg.org/multipage/indices.html#event-input-input ):
-
Вот пример того, как его использовать:
источник
Если вы используете ТОЛЬКО Internet Explorer, вы можете использовать это:
Надеюсь, это поможет.
источник
Существует довольно близкое решение (не исправляйте все способы вставки), но большинство из них:
Это работает для входов, а также для текстовых областей:
Делай так:
Как я уже сказал, не все способы вставить событие во все браузеры ... в худшем случае некоторые не запускают события вообще, но таймеры ужасно использовать для таких целей.
Но большинство способов вставки выполняется с помощью клавиатуры и / или мыши, поэтому обычно onkeyup или onmouseup запускаются после вставки, также onkeyup запускается при вводе с клавиатуры.
Убедитесь, что ваш контрольный код не займет много времени ... в противном случае пользователь получит плохое впечатление.
Да, хитрость в том, чтобы стрелять по клавишам и мышам ... но будьте осторожны, оба могут быть запущены, так что имейте в виду, что такое !!!
источник
Пожалуйста, оцените следующий подход, используя JQuery:
HTML:
Javascript (JQuery):
источник
«вход» работал для меня.
источник
Вы могли бы использовать
keydown
,keyup
иkeypress
события , а также.источник
Для отслеживания каждого попробуйте этот пример, а перед этим полностью уменьшите частоту мигания курсора до нуля.
onblur: событие генерируется при выходе
onchange: событие генерируется при выходе, если в inputtext вносятся какие-либо изменения
onkeydown: событие генерируется при любом нажатии клавиши (также для долгого удержания клавиши)
onkeyup: событие генерируется при любом отпускании ключа
onkeypress: то же, что onkeydown (или onkeyup), но не будет реагировать на ctrl, backsace, alt other
источник
2018 здесь, это то, что я делаю:
Если вы можете указать на недостатки в этом подходе, я был бы признателен.
источник
Метод 1: Добавить прослушиватель событий для
input
:Способ 2. Определите
oninput
свойство с помощью JavaScript:Способ 3: определить
oninput
свойство с помощью HTML:источник
Роберт Симер addEventListener не поддерживается в IE8.
«Старые версии IE поддерживали эквивалентный проприетарный метод EventTarget.attachEvent ()». https://developer.mozilla.org/it/docs/Web/API/Element/addEventListener
источник