Я хочу определять, когда содержимое текстового поля изменилось. Я могу использовать метод keyup, но он также обнаружит нажатия клавиш, которые не генерируют буквы, такие как клавиши со стрелками. Я подумал о двух способах сделать это, используя событие keyup:
- Проверьте явно, является ли код ascii нажатой клавиши буквой \ backspace \ delete
- Используйте замыкания, чтобы запомнить, какой текст был в текстовом поле до нажатия клавиши, и проверьте, изменилось ли это.
Оба выглядят довольно громоздко.
javascript
jquery
textbox
keypress
olamundo
источник
источник
.keyup()
событие ... подробнее здесь: stackoverflow.com/questions/3003879/….change()
если оно изменилось.Ответы:
Начните наблюдать событие «ввода» вместо «изменения».
... что красиво и чисто, но может быть расширено до:
источник
Используйте событие onchange в HTML / стандартном JavaScript.
В jQuery это событие change () . Например:
$('element').change(function() { // do something } );
РЕДАКТИРОВАТЬ
После прочтения некоторых комментариев, как насчет:
источник
Событие 'change' не работает правильно, но 'input' идеален.
источник
.on
рекомендуется использовать с 1.7 (а не.bind
).Как насчет этого:
<JQuery 1,7
> JQuery 1,7
Это работает в IE8 / IE9, FF, Chrome
источник
console.log
значение поля, оно регистрируется дважды, когда вы вводите символ.Ага. Вам не обязательно использовать замыкания, но вам нужно будет запомнить старое значение и сравнить его с новым.
Однако! Это по-прежнему не учитывает каждое изменение, потому что есть способы редактирования содержимого текстового поля, которые не требуют нажатия клавиш. Например, выделение диапазона текста, затем щелчок правой кнопкой мыши. Или перетаскивая его. Или сбросив текст из другого приложения в текстовое поле. Или изменение слова с помощью проверки правописания в браузере. Или...
Так что, если вы должны обнаружить каждое изменение, вы должны опросить его. Вы можете
window.setInterval
проверять поле по его предыдущему значению каждую (скажем) секунду. Можно также подключитьonkeyup
к одной и той же функции , так что изменения, которые вызваны нажатиями отражаются быстрее.Громоздкий? Да. Но это так или просто делайте это обычным способом обмена HTML и не пытайтесь мгновенно обновлять его.
источник
input
событие HTML5 является жизнеспособным и работает в текущих версиях всех основных браузеров.Вы можете использовать событие 'input', чтобы обнаружить изменение содержимого в текстовом поле. Не используйте «live» для привязки события, так как оно устарело в Jquery-1.7, поэтому используйте «on».
источник
Я предполагаю, что вы хотите сделать что-то интерактивное, когда текстовое поле изменяется (то есть получить некоторые данные через ajax). Я искал такую же функциональность. Я знаю, что использование глобального - не самое надежное и элегантное решение, но именно с этим я и поехал. Вот пример:
Здесь следует отметить одну ключевую вещь: я использую setTimeout, а не setInterval, поскольку не хочу отправлять несколько запросов одновременно. Это гарантирует, что таймер «останавливается» при отправке формы и «запускается» по завершении запроса. Я делаю это, вызывая checkSearchChanged, когда мой вызов ajax завершается. Очевидно, вы можете расширить это, чтобы проверить минимальную длину и т. Д.
В моем случае я использую ASP.Net MVC, чтобы вы могли увидеть, как связать это с MVC Ajax, а также в следующем посте:
http://geekswithblogs.net/DougLampe/archive/2010/12/21/simple-interactive-search-with-jquery-and-asp.net-mvc.aspx
источник
Я бы порекомендовал взглянуть на виджет автозаполнения jQuery UI. Они рассмотрели большинство случаев там, так как их кодовая база более зрелая, чем большинство из них.
Ниже приведена ссылка на демонстрационную страницу, чтобы вы могли убедиться, что она работает. http://jqueryui.com/demos/autocomplete/#default
Вы получите наибольшую выгоду от чтения источника и просмотра того, как они его решили. Вы можете найти его здесь: https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.autocomplete.js .
В основном они делают все это, они связывают
input, keydown, keyup, keypress, focus and blur
. Тогда у них есть специальная обработка для всех видов ключей, таких какpage up, page down, up arrow key and down arrow key
. Таймер используется перед получением содержимого текстового поля. Когда пользователь вводит клавишу, которая не соответствует команде (клавиша «вверх», клавиша «вниз» и т. Д.), Появляется таймер, который исследует содержимое примерно через 300 миллисекунд. В коде это выглядит так:Причиной использования таймера является то, что пользовательский интерфейс получает возможность обновления. Когда Javascript работает, пользовательский интерфейс не может быть обновлен, поэтому вызов функции задержки. Это хорошо работает для других ситуаций, таких как сохранение фокуса на текстовом поле (используемом этим кодом).
Таким образом, вы можете использовать виджет или скопировать код в свой собственный виджет, если вы не используете jQuery UI (или в моем случае разработку пользовательского виджета).
источник
Я хотел бы спросить, почему вы пытаетесь определить, когда содержимое текстового поля изменилось в реальном времени ?
Альтернативой может быть установка таймера (через setIntval?) И сравнение последнего сохраненного значения с текущим, а затем сброс таймера. Это гарантировало бы отлов ЛЮБОГО изменения, вызванного клавишами, мышью, другим устройством ввода, которое вы не рассматривали, или даже JavaScript, изменяющим значение (еще одна возможность, о которой никто не упомянул) из другой части приложения.
источник
Вы считаете, использовать событие изменения ?
источник
Используйте
textchange
событие через настроенный jQuery shim для кросс-браузернойinput
совместимости. http://benalpert.com/2013/06/18/a-near-perfect-oninput-shim-for-ie-8-and-9.html (последний разветвленный github: https://github.com/pandell /jquery-splendid-textchange/blob/master/jquery.splendid.textchange.js )Это обрабатывает все входные теги, в том числе
<textarea>content</textarea>
, что не всегда работает сchange
keyup
т. Д. (!) Только jQuery последовательноon("input propertychange")
обрабатывает<textarea>
теги, а вышеприведенное - шим для всех браузеров, которые не понимаютinput
событие.JS Bin test
Это также обрабатывает вставку, удаление и не дублирует усилие при keyup.
Если шим не используется, используйте
on("input propertychange")
события jQuery .источник
Там есть полный рабочий пример здесь .
источник
Что - то , как это должно работать, в основном потому , что
focus
иfocusout
будет в конечном итоге с двумя отдельными значениями. Я используюdata
здесь, потому что он хранит значения в элементе, но не касается DOM. Это также простой способ сохранить значение, связанное с его элементом. Вы также можете легко использовать переменную с более высокой областью действия.источник
Этот код обнаруживает всякий раз, когда содержимое текстового поля изменяется пользователем и изменяется кодом Javascript.
источник