Как сделать так, чтобы кнопка возврата в браузере вызывала событие изменения входа? - PullRequest
2 голосов
/ 02 мая 2011

Я пытаюсь обнаружить изменения в полях ввода, чтобы предупредить пользователей о несохраненных изменениях в форме. Я использую событие onchange для полей, чтобы записать, что форма изменилась. Затем я использую событие окна beforeunload, чтобы не дать пользователю покинуть страницу, если требуется сохранение. Проблема в том, что кнопка «Назад» во всех основных браузерах позволяет активному вводу инициировать событие изменения. Как мне обойти эту проблему?

Ниже приведены тестовые файлы, которые я использую. Я хочу, чтобы оповещение сработало, когда пользователь редактирует поле ввода, а затем сразу же щелкает назад. Редактирование текста, а затем нажатие на тело вызовет изменение, но этого недостаточно.

starteditor.html

<!doctype html>
<html>
<head>
</head>
<body>
    <a href="editor.html">Click me</a>
</body>
</html>

editor.html

<!doctype html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script> 
    <script>
        $(document).ready(function(){
            $("form").delegate("input", "change", function () { alert("I changed") });
        });
    </script>
</head>
<body>
    Edit text then click the browsers back button.
    <form>
        <input type="text" />
    </form>
</body>
</html>

1 Ответ

1 голос
/ 02 мая 2011

Краткий ответ: нет.

Кнопка «Назад» принадлежит пользователю и находится вне области просмотра страницы. Самое близкое, что вы получите, это событие window.unload. Но окно не будет знать, закрыл ли пользователь окно, нажал ли он кнопку «Назад», нажал ли F5, чтобы перезагрузить страницу, набрал новый URL в поле ввода URL, открыл закладку или велел браузеру завершить работу или любой другой иначе вы можете отклонить страницу. Кроме того, вы не можете отменить событие unload: оно предоставляется для корректного закрытия страницы.

Из спецификации в http://www.w3.org/TR/DOM-Level-2-Events/events.html, раздел 1.6.5 ( типы событий HTML ):

выгрузка
Событие unload происходит, когда реализация DOM удаляет документ из окна или фрейма. Это событие действительно для элементов BODY и FRAMESET.
  • Пузыри: нет
  • Отменяемые: Нет
  • Информация о контексте: Нет
...