![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
culver |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 8.10.2012 Репутация: нет Всего: нет |
Здравствуйте.
Есть большая форма, точнее (от формы я отказался) большое количество инпутов и селектов на странице. На их событие "change" я повесил функцию отправки данных на сервер через ajax. Но это событие возникает только при утрате фокуса элементом и не возникает при закрытии окна браузера или всего браузера. Подскажите, пожалуйста, как мне отловить отредактированные данные при закрытии окна? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
При закрытии окна браузера срабатывает событие onbeforeunload. Если есть несохраненные данные - нужно отослать их на сервер и тем временем выдать сообщение пользователю "Есть несохраненные данные. Сохранить?" или просто "подожди пару сек...". Пока юзер тормозит, глядя на всплывший алерт - сохранения улетят на сервер...
Вообще - можно сохранять изменения в режиме "черновик" - без валидации полей. Все измененные поля тупо сливать в сессию. Для этого вешать таймаут на onkeyup, onchange, onclick и так далее. По таймауту собирать измененные поля и отсылать на сервер. При открытии этой же формы - восстанавливать поля из сессии и по нажатии на "сохранить" - валидировать и сохранять куда надо. Можно в качестве "черновика" использовать локальное хранилище (localstorage). Это сообщение отредактировал(а) ksnk - 4.5.2016, 12:57 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
culver |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 8.10.2012 Репутация: нет Всего: нет |
А можно ли при обработке события onbeforeunload узнать на каком элементе был фокус до закрытия, что-бы сохранить его данные?
При вставке текста из буфера мышкой будет ли вызываться onclick? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
В методе onload пробежаться и сохранить все значения всех контролов в отдельном атрибуте этого контрола, или в data этого элемента.
Когда нужно сбросить на сервер изменения - опять бежим по всем контролам и сохраняем только те, которые изменились. Потеря фокуса элементом - событие onblur. При вставке значения копипастом - сработает событие onchange -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
hardddrugs |
|
|||
Unregistered |
Модератор: Сообщение скрыто. |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |