Ваш вопрос немного расплывчатый.Ваш вопрос подразумевает, что вы отправляете форму асинхронно, но вы сказали, что не знакомы с JavaScript.Асинхронная отправка формы требует знания JS.Кроме того, если вы на самом деле отправляете форму синхронно, решение было бы слишком очевидным (просто условно визуализируйте некоторые JS на стороне сервера).
Если вы действительно отправляетеформы асинхронно, а затем просто установите некоторые токены / переключатели в качестве атрибута data-xxx
формы после успешной отправки формы.Например,
function submit(form) {
// Do your thing to submit it.
// And then on succes:
form['data-submitted'] = true;
return false;
}
Затем, во время события beforeunload
, вы просто проверяете, есть ли токен / переключатель, и если он отсутствует, верните сообщение соответствующим образом.
window.onbeforeunload = function() {
for (var i = 0; i < document.forms.length; i++) {
var form = document.forms[i];
if (form['data-submitted'] != 'undefined' && !form['data-submitted']) {
return "There is unsaved data!";
}
}
}
Обратите внимание, что вы не можете использовать событие unload
для этого, так как слишком поздно держать страницу открытой.
Обновление :поэтому форма подается синхронно.Хорошо, какой бы серверный язык вы не использовали, просто позвольте ему условно отображать вызов JS window.onbeforeunload
, когда форма не отправлена (вы, очевидно, уже знаете, когда форма была отправлена, как еще вы сможете обработать ее?;)).Вам также нужно отключить вызов window.onbeforeunload
, когда форма собирается быть отправленной.
На основании вашей истории вопросов, держу пари, что вы знаете PHP, так что вот пример целевой загрузки PHP:
<?php
if (!$form_is_submitted) {
echo '<script>window.onbeforeunload = function() { return "There is unsaved data!"; }</script>';
echo '<form onsubmit="window.onbeforeunload=null">';
}
?>