Можно ли программно вызвать событие onbeforeunload? - PullRequest
12 голосов
/ 16 августа 2010

В настоящее время я использую плагин jquery-form-наблюдающий , который использует onbeforeunload для уведомления пользователя о «несохраненных» изменениях.

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

Так есть ли способ вызвать onbeununload через jQuery или иным образом?

Ответы [ 2 ]

3 голосов
/ 16 августа 2010

Я не знаю, есть ли прямой способ сделать это, но вы всегда можете эмулировать окно подтверждения браузера самостоятельно.Вот простая функция, которую я подготовил на основе спецификаций в 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 голосов
/ 16 августа 2010

Вы можете сделать это с помощью метода .trigger () :

$('button').click(function(){
    $(window).trigger('beforeunload');
});
...