Вот такие предлагаемые решения, который выглядит разумным
http://www.ilovebonnie.net/2009/09/23/how-to-use-onbeforeunload-with-form-submit-buttons/
UPDATE (ссылка мертва) - было скопировано содержимое из Google Cache
Как использовать onbeforeunload с подчиненной формой Кнопки
23 сентября 2009 г. - Geekery
При выполнении некоторых программ я столкнулся с интересным затруднительным положением. Хотя я понимаю, что зло для пользователя трудно оставить на странице, я здесь не для того, чтобы рассуждать о достоинствах (или их отсутствии) onbeforeunload.
В определенной форме мы вынуждаем браузер не кэшировать информацию, чтобы избежать потенциальных проблем AJAX/JavaScript, если они должны оставить форму и вернуться, поскольку браузеры не все действуют одинаково (например, IE оставляет флажки отмеченными но не помнит изменений, которые произошли на странице из-за JavaScript). Поэтому мы предупреждаем наших пользователей, когда они собираются оставить форму заказа, чтобы сообщить им, что им нужно будет заполнить ее снова.
Функции был достаточно прост:
window.onbeforeunload = function() {
return "You are about to leave this order form. You will lose any information...";
}
К сожалению, это также будет срабатывать, если пользователь представил форму, которая, очевидно, не то, что мы хотим. После поиска вокруг в Интернете я наткнулся на простое решение, что я думал, что я хотел бы поделиться:
// Create a variable that can be set upon form submission
var submitFormOkay = false;
window.onbeforeunload = function() {
if (!submitFormOkay) {
return "You are about to leave this order form. You will lose any information...";
}
}
С OnClick появляется зарегистрироваться перед onsubmit при нажатии на кнопку отправки, мы можем добавить немного объявление переменной для нашей кнопки отправки так что submitFormOkay будет установлено значение true до того, как произойдет отправка формы:
<input type="submit" id="submit_button" onclick="submitFormOkay = true;">
Что относительно Firefox? – Qwertiy
@Qwertiy Что относительно Firefox? ОП сказал, что там работает нормально. – robertc
Нажмите кнопку mailto-link в FF, флаг установлен в значение true, событие 'onbeforeunload' не запущено. Теперь закройте страницу: 'onbeforeunload' запускается, но игнорируется. – Qwertiy