Существует множество способов <input type="text">
изменить значение can, в том числе:
- нажатия клавиш
- копировать вставить
- модифицировано с помощью JavaScript
- автоматически заполняется браузером или панелью инструментов
Я хочу, чтобы моя функция JavaScript вызывалась (с текущим входным значением) каждый раз, когда она изменяется. И я хочу, чтобы он вызывался сразу, а не только тогда, когда ввод теряет фокус.
Я ищу самый чистый и надежный способ сделать это во всех браузерах (желательно с использованием jQuery).
javascript
jquery
html
Дастин Босвелл
источник
источник
Ответы:
Этот код jQuery ловит немедленные изменения любого элемента и должен работать во всех браузерах:
источник
input
мой взгляд, событие HTML5 должно охватывать все современные браузеры ( ссылка на MDN ).keyup
Остальное следует ловить, правда, с небольшой задержкой (input
срабатывает при нажатии клавиши вниз).propertychange
это запатентованное событие MS, и я не уверен,paste
действительно ли это необходимо.document.getElementById('txtInput').value = 'some text';
input
событие здесь утверждает, что оно не срабатывает, когда содержимое модифицируется с помощью JavaScript. Тем не менее,onpropertychange
событие происходит при модификации через JS (см. Здесь ). Таким образом, этот код будет работать, когда содержимое будет изменено через JS в IE, но не будет работать в других браузерах.Необычное решение в реальном времени для jQuery> = 1.9
если вы также хотите обнаружить событие "click", просто:
если вы используете jQuery <= 1.4, просто используйте
live
вместоon
.источник
К сожалению, я думаю,
setInterval
выигрывает приз:Это самое чистое решение, всего одна строка кода. Это также самое надежное решение, так как вам не нужно беспокоиться обо всех различных событиях / способах
input
получения значения.Недостатки использования 'setInterval', кажется, не применимы в этом случае:
источник
Привязка к
oninput
событию, кажется, работает нормально в большинстве здравомыслящих браузеров. IE9 также поддерживает это, но реализация содержит ошибки (событие не вызывается при удалении символов).В jQuery версии 1.7+
on
метод полезен для привязки к событию следующим образом:источник
oninput
событие не работает сinput[type=reset]
редактированием или редактированием JavaScript, как вы можете видеть в этом тесте: codepen.io/yukulele/pen/xtEpbОтвет на 2017 год : событие ввода делает именно это для чего-то более нового, чем IE8.
источник
input
событие не может обнаружить изменения JS.К сожалению, нет событий или набор событий, которые соответствуют вашим критериям. Клавиши и копирование / вставка могут быть обработаны с
keyup
событием. Изменения через JS сложнее. Если у вас есть контроль над кодом, который устанавливает текстовое поле, лучше всего изменить его, чтобы он либо вызывал вашу функцию напрямую, либо вызывал пользовательское событие в текстовом поле:Если у вас нет контроля над этим кодом, вы можете использовать
setInterval()
текстовое поле для просмотра изменений:Этот вид активного мониторинга не будет ловить обновления «немедленно», но, по-видимому, он достаточно быстрый, чтобы не было заметной задержки. Как отметил в комментариях DrLouie, это решение, вероятно, не очень хорошо масштабируется, если вам нужно следить за большим количеством информации. Вы всегда можете отрегулировать 2-й параметр
setInterval()
для проверки более или менее часто.источник
myTextBox.value = 'foo';
этой ситуации нет событий JavaScript.input.onpropertychange
, и FF2 +, Opera 9.5, Safari 3 и Chrome 1 могут справиться с этимinput.__defineSetter__('value', ...)
(что, хотя это задокументировано как не работающее на узлах DOM, я могу проверить оно работает). Единственное отличие от реализации IE заключается в том, что IE запускает обработчик не только при программной настройке, но и во время ключевых событий.Вот несколько иное решение, если вам не понравились другие ответы:
Учтите, что вы не можете полагаться на клики и нажатия клавиш для захвата вставки контекстного меню.
источник
$("input[id^=Units_]").each(function() {
Добавьте этот код куда-нибудь, это поможет.
Нашел это решение в val () не вызывает change () в jQuery
источник
Я создал образец. Пусть это будет работать для вас.
http://jsfiddle.net/utbh575s/
источник
На самом деле нам не нужно настраивать циклы для обнаружения изменений javaScript. Мы уже настроили много слушателей событий для элемента, который мы хотим обнаружить. только запуск любого безвредного события сделает работу.
и, конечно, это доступно, только если у вас есть полный контроль над изменениями JavaScript в вашем проекте.
источник
Что ж, лучший способ - это охватить три перечисленные вами базы. Простое: onblur,: onkeyup и т. Д. Не сработает для того, что вы хотите, поэтому просто объедините их.
KeyUp должен охватывать первые два, и если Javascript изменяет поле ввода, я надеюсь, что это ваш собственный javascript, поэтому просто добавьте обратный вызов в функцию, которая его модифицирует.
источник
Вот рабочий пример, который я использую для реализации варианта автозаполнения, заполняющего селектор jqueryui (список), но я не хочу, чтобы он функционировал точно так же, как автозаполнение jqueryui, которое выполняет раскрывающееся меню.
источник
НЕТ JQUERY! (Это в любом случае устарело в наши дни)
Изменить: я удалил события HTML. НЕ используйте события HTML ... вместо этого используйте прослушиватели событий Javascript.
источник
Разве вы не можете просто использовать
<span contenteditable="true" spellcheck="false">
элемент вместо<input type="text">
?<span>
(сcontenteditable="true" spellcheck="false"
атрибутами) отличается<input>
главным образом потому, что:<input>
.value
свойства, но текст отображается какinnerText
и составляет часть его внутреннего тела.<input>
как нет, хотя вы устанавливаете атрибутmultiline="true"
.Чтобы добиться внешнего вида, вы можете, конечно, стилизовать его в CSS, при этом записав значение, как
innerText
вы можете получить для него событие:Вот скрипка .
К сожалению, есть кое-что, что на самом деле не работает в IE и Edge, чего я не могу найти.
источник
Хотя этот вопрос был опубликован 10 лет назад, я считаю, что он все еще нуждается в некоторых улучшениях. Так вот мое решение.
Единственная проблема с этим решением заключается в том, что оно не сработает, если значение изменится с JavaScript
$('selector').val('some value')
. Вы можете вызвать любое событие для вашего селектора, когда вы измените значение с JavaScript.источник
Вы можете увидеть этот пример и выбрать, какие события вас интересуют:
источник
Я могу опоздать на вечеринку, но вы не можете просто использовать событие .change (), которое предоставляет jQuery.
Вы должны быть в состоянии сделать что-то вроде ...
Вы всегда можете привязать его к списку элементов управления с чем-то вроде ...
Оперативное связывание гарантирует, что все элементы, которые существуют на странице сейчас и в будущем, будут обработаны.
источник
Это самый быстрый и чистый способ сделать это:
Я использую Jquery ->
Это работает довольно хорошо для меня.
источник