Как остановить страницу при разгрузке (перемещение) в JS?

Кто-нибудь знает, как остановить перегрузку или перемещение страницы?

jQuery(function($) {

    /* global on unload notification */
    warning = true;

    if(warning) {
        $(window).bind("unload", function() { 
            if (confirm("Do you want to leave this page") == true) {
                //they pressed OK
                alert('ok');
            } else {
                // they pressed Cancel
                alert('cancel');
                return false;
            }
        });
    }
});

Сейчас я работаю над сайтом электронной коммерции, страница, отображающая ваши будущие заказы, имеет возможность изменять количество элементов, упорядоченных с помощью кнопок +/-. Изменяя величины таким образом, это фактически не изменяет порядок, они должны нажать подтверждение и, следовательно, совершить положительное действие, чтобы изменить порядок.

Однако, если они изменили количество и удалились от страницы, я хотел бы предупредить их, что они делают это, если это случайность, поскольку измененные количества будут потеряны, если они будут перемещаться или обновлять страницу.

В приведенном выше коде я использую глобальную переменную, которая по умолчанию будет ложной (это единственно верно для тестирования), когда количество изменено, я обновлю эту переменную, чтобы быть правдой, и когда они подтвердят изменения, которые я установил это ложно.

Если предупреждение верно и страница выгружена, я предлагаю им окно с подтверждением, если они говорят "нет", они хотели бы остаться на этой странице. Мне нужно остановить его при разгрузке. return false не работает, он все же позволяет пользователю перемещаться (оповещения доступны только для отладки)

Любые идеи?

Ответ 1

onbeforeunload - тот, который вы хотите; ваша функция "должна присваивать строковое значение свойству returnValue объекта Event и возвращать ту же строку". Проверьте документы Microsoft и Mozilla для подробности.

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

Ответ 2

Этот код предупреждает в соответствии с предложением Натали, но отключает предупреждение, если была отправлена ​​форма на странице. Использует JQuery.

var warning = true;
window.onbeforeunload = function() { 
  if (warning) {
    return "You have made changes on this page that you have not yet confirmed. If you navigate away from this page you will lose your unsaved changes";
  }
}

$('form').submit(function() {
   window.onbeforeunload = null;
});

Ответ 3

вы хотите использовать событие onbeforeunload.

Ответ 4

window.onbeforeunload = function() { 
  if (warning) {
    return 'You have made changes on this page that you have not yet confirmed. 
    If you navigate away from this page you will loose your unsaved changes';
  }
}

не поддерживается в хром, сафари и опера

Ответ 5

window.onbeforeunload = confirmExit;
function confirmExit()
{
    return "You have attempted to leave this page.  If you have made any changes to the fields without clicking the Save button, your changes will be lost.  Are you sure you want to exit this page?";
}

Ответ 6

Попробуйте использовать e.preventDefault() вместо возврата false. 'e' будет первым аргументом для вашего обратного вызова разгрузки.