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


Автор: culver 4.5.2016, 11:03
Здравствуйте.
Есть большая форма, точнее (от формы я отказался) большое количество инпутов и селектов на странице. На их событие "change" я повесил функцию отправки данных на сервер через ajax. Но это событие возникает только при утрате фокуса элементом и не возникает при закрытии окна браузера или всего браузера. Подскажите, пожалуйста, как мне отловить отредактированные данные при закрытии окна? 

Автор: ksnk 4.5.2016, 12:19
При закрытии окна браузера срабатывает событие onbeforeunload. Если есть несохраненные данные - нужно отослать их на сервер и тем временем выдать сообщение пользователю "Есть несохраненные данные. Сохранить?" или просто "подожди пару сек...". Пока юзер тормозит, глядя на всплывший алерт - сохранения улетят на сервер... 

Вообще - можно сохранять изменения в режиме "черновик" - без валидации полей. Все измененные поля тупо сливать в сессию. Для этого вешать таймаут на onkeyup, onchange, onclick и так далее. По таймауту собирать измененные поля и отсылать на сервер. При открытии этой же формы - восстанавливать поля из сессии и по нажатии на "сохранить" - валидировать и сохранять куда надо. Можно в качестве "черновика" использовать локальное хранилище (localstorage).

Автор: culver 4.5.2016, 14:33
А можно ли при обработке события onbeforeunload узнать на каком элементе был фокус до закрытия, что-бы сохранить его данные?
При вставке текста из буфера мышкой будет ли вызываться onclick?

Автор: ksnk 4.5.2016, 15:49
В методе onload пробежаться и сохранить все значения всех контролов в отдельном атрибуте этого контрола, или в data этого элемента.
Когда нужно сбросить на сервер изменения - опять бежим по всем контролам и сохраняем только те, которые изменились.

Потеря фокуса элементом - событие onblur. При вставке значения копипастом - сработает событие onchange

Автор: hardddrugs 4.5.2016, 23:34
Модератор: Сообщение скрыто.

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