onunload - проверить, была ли отправлена ​​форма - PullRequest
0 голосов
/ 29 июня 2010

У меня есть форма на веб-странице. Когда пользователь уходит с этой страницы, я хочу убедиться, что форма была отправлена. Если это так, то пользователь просто переходит на следующую страницу, если нет, он получает сообщение с предупреждением и возвращается на исходную страницу, где находится форма.

Я не слишком знаком с javascript, поэтому буду признателен за фрагменты кода, если это возможно?

GF

1 Ответ

1 голос
/ 29 июня 2010

Ваш вопрос немного расплывчатый.Ваш вопрос подразумевает, что вы отправляете форму асинхронно, но вы сказали, что не знакомы с 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">';
    }
?>
...