Javascript: проверьте, уходит ли пользователь с помощью отправки формы или простого щелчка по ссылке.

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

есть идеи ?


person disc0dancer    schedule 08.05.2009    source источник
comment
Почему бы вам не провести тест и не посмотреть, что сработает первым?   -  person svinto    schedule 08.05.2009


Ответы (3)


Вы на самом деле хотите window.onbeforeunload

window.onbeforeunload = function (e) {
  var e = e || window.event;

  // For IE and Firefox
  if (e) {
    e.returnValue = 'Are You Sure?';
  }

  // For Safari
  return 'Are You Sure?';
};
person Chad Grant    schedule 08.05.2009
comment
Я знаю, что он немного устарел, но в этом источнике поясняется, что эта функциональность предварительно -Файрфокс 4. - person arin; 24.04.2012

Оказывается, сначала срабатывает событие form.onSubmit, поэтому я могу использовать флаг. Я проверил это только в Firefox и Safari.

person disc0dancer    schedule 08.05.2009
comment
onsubmit не сработает, если они обновят страницу, щелкнут назад, введут новый URL-адрес. Чтобы предотвратить потерю работы, придерживайтесь onbeforeunload. Кстати, для правильной работы это должно быть сделано так, как описал Чад Грант, а не с помощью addEventListener. - person Juan Mendes; 09.03.2010

var isRefresh = true;
window.onunload = function () {
    alert('the page was ' + (isRefresh == false ? 'NOT ' : '') + 'refreshed');
}
$('a').live('click', function () { isRefresh = false; alert('a link was clicked'); });
$('form').bind('submit', function () { isRefresh = false; alert('form was submitted'); });

На основе Как перехватить событие закрытия окна браузера?. Я добавил логику обновления.

person Brad    schedule 09.03.2011