Как определить событие изменения в текстовом поле с помощью javascript?
Я пытаюсь определить, сколько символов осталось при вводе.
Я пробовал использовать событие onchange, но, похоже, это срабатывает только тогда, когда фокус отсутствует.
javascript
teepusink
источник
источник
onkeyup
это ужасное событие для обнаружения ввода. Используйтеoninput
иonpropertychange
(для поддержки IE).onchange
будет НЕ срабатывает , когда возникает контекстное меню вырезать / вставить.Это 2012 год, наступила эра пост-ПК, и нам все еще приходится бороться с чем-то столь же простым, как это. Это должно быть очень просто .
До тех пор , пока эта мечта исполняется, вот лучший способ сделать это, кросс-браузер: используйте комбинацию из
input
иonpropertychange
событий , как так:input
Мероприятие берет на IE9 +, FF, Chrome, Opera и Safari , иonpropertychange
заботится о IE8 (он также работает с IE6 и 7, но есть некоторые ошибки).Преимущество использования
input
и вonpropertychange
том, что они не срабатывают без необходимости (например, при нажатии клавишCtrl
илиShift
); так что, если вы хотите запустить относительно дорогостоящую операцию при изменении содержимого текстового поля, это правильный путь .Теперь IE, как всегда, поддерживает это наполовину: в IE
input
неonpropertychange
срабатывают, когда символы удаляются из текстового поля. Поэтому, если вам нужно обработать удаление символов в IE, используйтеkeypress
(в отличие от использованияkeyup
/keydown
, потому что они срабатывают только один раз, даже если пользователь нажимает и удерживает клавишу).Источник: http://www.alistapart.com/articles/expanding-text-areas-made-elegant/
РЕДАКТИРОВАТЬ: Кажется, что даже вышеуказанное решение не идеально, как правильно указано в комментариях: наличие
addEventListener
свойства в текстовом поле не означает, что вы работаете с нормальным браузером; аналогично наличиеattachEvent
свойства не подразумевает IE. Если вы хотите, чтобы ваш код был действительно герметичным, вам следует подумать об изменении этого. См . Комментарий Тима Дауна для указателей.источник
addEventListener
не подразумевает поддержкуinput
события, и наоборот); обнаружение функции было бы лучше. См. Это сообщение в блоге для обсуждения этого.oninput
как мы должны это сделать, но вы, вероятно, не должны использовать его вaddEventListener
качестве теста для поддержки браузера. +1 в любом случае.keypress
событие для обработки этого случая в IE9 (и, возможно, в более поздних версиях).input
Событие Обработчик также может быть определен путем реализации.oninput
свойства объекта.Не тестировалось в Firefox.
источник
Я знаю, что это не совсем ваш вопрос, но я подумал, что это может быть полезно. Для некоторых приложений хорошо, чтобы функция изменения срабатывала не каждый раз при нажатии клавиши. Этого можно добиться примерно так:
Это работает путем проверки того, возникло ли более недавнее событие в течение определенного периода задержки. Удачи!
источник
Я знаю, что этот вопрос был специфичен для JavaScript, однако, похоже, нет хорошего, чистого способа ВСЕГДА определять, когда текстовое поле изменяется во всех текущих браузерах. Я узнал, что jquery позаботился об этом за нас. Он даже обрабатывает изменения контекстного меню в текстовых областях. Один и тот же синтаксис используется независимо от типа ввода.
или
источник
bind("input cut paste"...
и он работает как шарм - ввод, вырезание и вставка с помощью клавиатуры или контекстного меню; даже перетаскивание текста.change
событие дляtextarea
.Вы можете прослушивать событие при изменении текстового поля и вносить изменения по своему усмотрению. Вот один пример.
источник
Keyup должно хватить, если в паре с атрибутом проверки / шаблона ввода HTML5. Итак, создайте шаблон (регулярное выражение) для проверки ввода и воздействия на статус .checkValidity (). Что-то вроде ниже может сработать. В вашем случае вам нужно, чтобы регулярное выражение соответствовало длине. Мое решение используется / доступно для демонстрации онлайн здесь .
источник
Код, который я использовал для IE 11 без jquery и только для одного текстового поля:
Javascript:
и HTML:
источник
Попробуй это. Это просто, и с 2016 года я уверен, что он будет работать в большинстве браузеров.
источник
Лучшее, что вы можете сделать, - это настроить функцию, которая будет вызываться в течение определенного времени, и эту функцию для проверки содержимого вашего текстового поля.
источник