Можно ли программно запускать событие onbeforeunload?
В настоящее время я использую плагин jquery-form-observe, который использует onbeforeunload для запроса пользователю о "несохраненных" изменениях.
Но у меня есть сценарий, когда мне нужно вызвать это нажатием кнопки: нажатие кнопки в конечном итоге приводит к изменению страницы, но я хочу пригласить пользователя, прежде чем они начнут процесс, когда кнопка будет нажата...
Итак, есть способ вызвать onbeforeunload через jQuery или иначе?
Ответы
Ответ 1
Я не знаю, есть ли прямой способ сделать это, но вы всегда можете эмулировать окно подтверждения браузера самостоятельно. Здесь простую функцию, которую я приготовил на основе спецификаций в MSDN:
function triggerBeforeUnload() {
var event = {};
handler(event);
if (typeof event.returnValue == 'undefined' ||
confirm('Are you sure you want to navigate away from this page?\n\n' + event.returnValue + '\n\nPress OK to continue, or Cancel to stay on the current page.')) {
// Continue with page unload
} else {
// Cancel page unload
}
}
Изменить: В jquery.formobserver.js
, сразу после определения function beforeunload(e) { ... }
, добавьте эту строку:
handler = beforeunload;
Обратите внимание на изменение исходного кода: window.onbeforeunload
был заменен на handler
.
Ответ 2
Вы можете сделать это с помощью . trigger() метод:
$('button').click(function(){
$(window).trigger('beforeunload');
});
Ответ 3
Я наткнулся на этот вопрос, ища ответы на свой собственный вопрос, который был похож по своему характеру. Итак, я придумал обходной путь здесь. Мне нужно было вызвать "onbeforeunload" только тогда, когда пользователь нажимает на определенную кнопку и ни один из остальных. Надеюсь, это проливает свет на ваш вопрос.
Я получил его для работы в jsfiddle. Вы можете протестировать его там в демо, который я установил, и ясно видеть, что он работает только с одной из кнопок. Однако есть одно предостережение, за которое я не потрудился искать исправление. Если вы нажмете на кнопку и решите остаться на странице, то все последующие кнопки/ссылки/перенаправления/перезагрузки вызовут "onbeforeunload". Вы можете придумать свою собственную работу для "ошибки" (из-за отсутствия лучшего термины), чтобы сделать это так, чтобы это не вызвало эту реакцию, если пользователь решил остаться на странице. Однако он работает и выполняет то, что вы просили, чтобы он выполнял в тестовой среде.
Здесь код:
$(document).ready(function () {
$('.testButton').click(function () {
window.onbeforeunload = function () {
return "Enter your message here...";
}
});
});
EDIT:
Итак, после изучения других способов сделать то же самое, я столкнулся с другим способом связать событие с кнопкой, используя метод jQuery.on(). Код можно увидеть здесь, убедитесь, что старый код закомментирован. Опять же, такая же "ошибка", как и раньше, но по-прежнему предоставляет функциональные возможности, которые были запрошены.
Здесь альтернатива:
$(document).ready(function () {
$('.testButton').on("click", function (event) {
window.onbeforeunload = function () {
return "Enter your message here...";
}
});
});