Предложите сохранить данные, если и когда были внесены изменения - PullRequest
0 голосов
/ 10 декабря 2010

Я использую asp.net, и мне нужно отобразить подсказку для пользователя, если они внесли изменения в веб-страницу и случайно закрыли браузер.

Страницей может быть что угодно: от «Редактировать профиль» до «Отправить заявку» и т. Д.

Как я могу отобразить окно сообщения, обеспечив его отображение только в том случае, если были внесены изменения (в отличие от того, что пользователь вносит изменения, затем отменяет изменения и закрывает браузер)

Ответы [ 3 ]

1 голос
/ 10 декабря 2010

В прошлом я использовал некоторые сценарии на стороне клиента, которые выполняют эту проверку во время события onbeforeunload ....

var showPrompt=true;
var isDirty=false;
var hidePopup=false;

    function onBeforeUnload() {
        if (showPrompt) {
            if (isDirty) {
                if (hidePopup || confirm("Click ok to save your changes or click cancel to discard your changes.")) {
                    doSave();
                }
            }
        }
        showPrompt = true;
        hidePopup = false;
    }
  • ShowPrompt может иметь значение false, когда вы нажимаете наякорный тег, который не отвлечет вас от страницы.Например, <a onclick='showPrompt=false' href='javascript:doX()'/>
  • isDirty может использоваться для отслеживания необходимости сохранения чего-либо.Например, вы можете сделать что-то вроде $("input").onchange(function(){isDirty=true;});. Чтобы отслеживать отмены, вы можете заменить isDirty на функцию, которая проверяет текущее состояние из последнего сохраненного состояния.
  • HidePopup позволяет принудительно сохранить без подтверждения пользователя.
1 голос
/ 10 декабря 2010

Вы можете сделать это с помощью JavaScript.См. этот вопрос и один из первых двух ответов.

1 голос
/ 10 декабря 2010

Это очень трудно даже коснуться, не понимая, что на странице. Если это несколько элементов управления, вы фиксируете значения при загрузке страницы и сохраняете их для последующего сравнения. Если это сложная страница, вам нужно провести точное сравнение со всем состоянием просмотра.

Как правило, вы справляетесь с ситуацией такого типа, устанавливая логическое значение TRUE при первом внесении любого изменения и не обращая внимания на его изменение пользователем. Если вы просто пытаетесь избежать случайного несохранения данных, пользователь должен быть достаточно умен, чтобы знать, что он «отменил» свои изменения.

...