Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Отслеживание изменений в <textarea>


Автор: dmage 13.6.2009, 22:26
Как в <textarea> возможно отследить изменения?

Суть в следующем: есть <textarea> с достаточно объемным текстом. Примерно раз в n секунд необходимо отправлять на сервер информацию о том, что пользователь изменил в этом тексте. Если ничего не изменилось, то ничего не отправлять.

Отправлять весь с такой частотой довольно-таки накладно, поэтому хотелось бы отправлять информацию вида: с позции 25 добавлен текст "foobar", с позиции 60 по 70 текст удален.

Изначально была идея сделать слежение по событию onkeypress, однако непонятно как отследить изменения происходящие по Ctrl+Z. К тому же изменения по меню (например, Правка -> Отменить) таким образом вообще не ловятся.

Была так же идея по таймеру раз в n секунд делать diff сохранненого текста (от предыдущей итерации) и текущего текста, но т.к. n скорее всего будет <= 1, а алгоритм diff вроде как имеет сложность O(n^2) , то это решение кажется не очень удачным по производительности.

Собственно вопрос: есть ли подходящие события у <textarea> или есть какие-нибудь библиотеки, реализующие подобный функционал?

Автор: ksnk 13.6.2009, 23:35
Цитата(dmage @  13.6.2009,  22:26 Найти цитируемый пост)
Была так же идея по таймеру раз в n секунд делать diff 

imho, наиболее правильный путь. Разве что начинать этот процесс стоит при onfocused и заканчивать при onblur этой текстареи.

вряд ли нужно делать полный diff. Достаточно вычислить неизменённый кусок текста сначала и неизменённый кусок текста с конца. А вот середину уже посылать без точного выяснения различий.

Автор: Aliance 15.6.2009, 14:00
Посмотри http://codeshit.com/post416, думаю полезно прочесть будет. Если ловить все события для всех браузеров - то тогда можно легко отлавливать изменения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)