| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
imho, наиболее правильный путь. Разве что начинать этот процесс стоит при onfocused и заканчивать при onblur этой текстареи. вряд ли нужно делать полный diff. Достаточно вычислить неизменённый кусок текста сначала и неизменённый кусок текста с конца. А вот середину уже посылать без точного выяснения различий. |
| Автор: Aliance 15.6.2009, 14:00 |
| Посмотри http://codeshit.com/post416, думаю полезно прочесть будет. Если ловить все события для всех браузеров - то тогда можно легко отлавливать изменения. |