onunload - 检查Form是否已提交

时间:2010-06-28 20:20:32

标签: javascript forms form-submit

我在网页上有一个表单。当用户从该页面移动时,我想检查表单是否已提交。如果是,则用户只是继续到下一页,如果没有,则用户收到警报消息并返回到表单所在的原始页面。

我对javascript不太熟悉,所以如果可能,我会欣​​赏一些代码片段?

GF

1 个答案:

答案 0 :(得分:1)

你的问题有点模糊。您的问题暗示您是异步提交表单,但您说您不熟悉JavaScript。异步提交表单需要JS知识。另外,如果你实际上同步提交表单,那么解决方案就太明显了(只是在服务器端有条件地渲染一些JS)。

如果您实际上是异步提交表单,那么只需在成功提交表单后将一些标记/切换设置为表单的data-xxx属性。 E.g。

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">';
    }
?>