Перехват всех изменений содержимого поля ввода с использованием Javascript / jQuery - PullRequest
4 голосов
/ 31 марта 2011

У меня есть страница с полем ввода и функция, которая обрабатывает значение этого поля ввода и создает фрагмент текста. Я хочу, чтобы этот текст всегда был актуален по отношению к содержимому поля ввода, поэтому я прикрепил к нему несколько обработчиков событий с помощью jQuery для отслеживания любых изменений:

$('#input').bind('keyup cut paste', function(){...});

Это хорошо работает в большинстве случаев. Всякий раз, когда пользователь изменяет содержимое с помощью клавиатуры каким-либо образом или щелкает правой кнопкой мыши, чтобы использовать функции вырезания или вставки, текст обновляется немедленно. Тем не менее, есть два события, которые я до сих пор не выяснил, как поймать, если это вообще возможно сделать:

  • Когда пользователь выбирает текст и перетаскивает его, он занимает другую позицию в поле ввода
  • Когда пользователь использует действие «Удалить» в контекстном меню, вызываемом правой кнопкой мыши

Обе они, конечно, могут быть обнаружены путем привязки события change, но проблема этого подхода заключается в том, что он не срабатывает, пока поле ввода не потеряет фокус. Весь смысл этих привязок заключается в обновлении текста в режиме реального времени при изменении значения поля ввода, поэтому change не годится.

Английский - мой второй язык, поэтому я мог просто плохо формулировать результаты поиска в Google, но пока они ничего не нашли. Я не нашел никаких решений для этого после того, как пролистал пару связанных SO страниц, поэтому я спрашиваю здесь. Есть ли какое-нибудь событие, связанное с этим, которого я не знаю? Если нет, могу ли я выбрать другой подход? Или это просто невозможно с простым Javascript?

Ответы [ 3 ]

7 голосов
/ 31 марта 2011

В браузерах не IE вы можете обрабатывать событие input.
В IE вы можете обрабатывать событие propertychange.

Демо (работает во всехбраузеры)

0 голосов
/ 31 марта 2011

Если вы не можете найти комбинацию событий, которая охватывает все случаи, вы можете использовать setInterval(function() {... }, period).Вы можете поиграть с period, чтобы увидеть, насколько хорошо это работает.

0 голосов
/ 31 марта 2011

Возможно этот вопрос (и связанный с ним jsfiddle) может ответить на ваш вопрос.

(на связанном jsfiddle поместите текст в верхнее поле для проверки)

Другими словами, привязка к mouseup и mousedown и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...