Есть ли событие DOM «изменено содержимое texbox»? - PullRequest
9 голосов
/ 24 февраля 2010

Каждый раз, когда мне нужно написать фрагмент JavaScript, который контролирует поле ввода, я обычно заканчиваю тем, что делаю что-то вроде:

$("#field").keyup(myHandler).keydown(myHandler).change(myHandler);

Это не идеально, но обычно работает в большинстве случаев, и поэтому я продолжаю. У меня просто есть немного времени, чтобы разобраться в этом должным образом. Вероятно, основная проблема заключается в том, что он не улавливает правки, сделанные мышью (щелчок правой кнопкой мыши + вставка / вырезка). Кроме того, это не совсем то, что я хочу. Это фиксирует все движения курсора и другие события клавиатуры, которые меня не особо интересуют. Поэтому вопрос:

Существует ли надежное кросс-браузерное событие, которое запускается каждый раз, когда после изменяется содержимое ввода или текстовой области?

Во время краткого поиска я обнаружил события onpropertychange и DOMAttrModified. Но, кроме того, что они работают не во всех браузерах, они не запускаются при редактировании ввода или текстовой области.

1 Ответ

6 голосов
/ 25 февраля 2010

Похоже, что по крайней мере последние версии Internet Explorer, Firefox, Chrome и Safari поддерживают события cut и paste, которые запускаются сразу после вырезания или вставки текста в заданном элементе ввода. События запускаются с помощью клавиатуры и мыши. Прослушивание комбинации этих и других событий должно обеспечить требуемую функциональность.

$("#foo").bind("keyup keydown change paste cut", handler);

Я проверял это на Mac в Firefox 3.6, Chrome 5.0 (dev) и Safari 4, а также в Windows в Firefox 3.5 и IE8.

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