Давненько я не писал, столько накопилось заготовок для постов, чтож... появилось время, появятся и статьи
Работаю, значит над проектом ХХХ, сделан на ASP.NET Web Forms, и сделана там проверка на изменение данных формы, и даже работает.
Поясняю - пользователь захотит на редактирование каких-то данных, и вдруг, без сохранения, пытается уйти со страницы, данные - естесственно не сохранятся, а может пользователь случайно закрыл окно браузера (а на форме под 50 полей) - нужно его спросить - мол, действительно хочешь уйти со страницы? И если скажет - да, то тогда позволять закрывать, если нет - то оставляем окно браузера открытым.
На нашем проекте был использован плагин jQuery - FormNavigate, ему отдаешь хавать форму, и он сам отследит - менялись ли данные.
У клиента - он не работал, по крайней мере в тот момент, когда я пришел в проект - это бага имела место быть. А плагин то в IE6, IE7 и не работал
Ну думаю, сами решим, имхо - делается просто, особенно когда лишь одна форма на странице, - вешаем обработчик нажатия клавиши на все текстовые поля (да все инпуты для данных) и если событие происходит - какой-нить глобальный флаг на странице меняем на true и все
А при закрытии окна (обновлении, уходе со страницы) - проверяем его на true, и если он истин, то спрашиваем - а стоит ли уходить со страницы
Для простоты - станицы где следует проверять факт изменения значений полей форм - унаследованы от интерфейса INavigateConfirm, а на мастерпейдже проверяем - если страница реализует этот интерфейс, то добавляем скрипт проверки:
<% if (Page is INavigateConfirm)
{ %>
<script type="text/javascript" language="javascript">
var global_formNavigate = true; // Js Global Variable for onChange Flag
jQuery("input[type=text], input[type='textarea'], input[type='password'], input[type='radio'], input[type='checkbox'], input[type='file']").live('change keypress', function(event) {
global_formNavigate = false;
});
jQuery("input[type=submit]").click(function() { global_formNavigate = true; });
window.onbeforeunload = function() {
if (global_formNavigate) { }
else {
return "Содержимое было изменено! \n Вы уверены, что хотите покинуть страницу без сохранения?";
}
};
</script>
<% } %>
Малость обновленный скрипт http://www.sansys.net/2014/09/deny-close-page-after-form-edit.html
ОтветитьУдалить