Вот предложенное решение, которое выглядит разумным
http://www.ilovebonnie.net/2009/09/23/how-to-use-onbeforeunload-with-form-submit-buttons/
ОБНОВЛЕНИЕ (ссылка не работает) - скопированное содержимое из 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 регистрируется перед отправкой, мы можем добавить небольшое объявление переменной к нашей кнопке отправки, чтобы для submitFormOkay было установлено значение true, прежде чем произойдет отправка формы:
<input type="submit" id="submit_button" onclick="submitFormOkay = true;">