在窗口关闭时提交表格?

时间:2012-11-29 13:36:41

标签: php javascript jquery forms

有人可以告诉我如何在两页上提交表格,如果表格在第二页上关闭,这仍然会自动提交第一页的信息吗?

E.g。

第1页: 全名 电子邮件 电话号码

用户点击提交...

第2页: 感谢您提交详细信息,请选择回电时间..

然后用户关闭窗口或输入回叫时间并按提交,但即使他们关闭第二页上的窗口并且没有输入回叫时间,我也需要提交原始信息。 / p>

我想也许可能会使用会话变量存储信息,然后可能javascript / jquery在窗口关闭时提交表单?

有人能说最好的是这样做吗?

我应该提一下,我将数据插入MySQL表,然后使用CURL发布数据。因此,如果提交回调时间,我可以很容易地插入到数据库中,然后在最后一个id上执行更新语句。

但是如果窗口在第二个表单页面上关闭,我不知道如何发布最后一条MySQL记录?

3 个答案:

答案 0 :(得分:1)

$(window).bind('beforeunload', function() { 
    $("#form-submit").click();
});

其中#form-submit是提交按钮的ID。

答案 1 :(得分:1)

当用户出于任何原因离开您的网页时,beforeunload事件就会触发。

例如,如果用户提交表单,单击链接,关闭窗口(或选项卡)或使用地址栏,搜索框或书签转到新页面,则会触发它。

您可以使用以下代码排除表单提交和超链接(其他框架除外):

var inFormOrLink;
$('a').live('click', function() { inFormOrLink = true; });
$('form').bind('submit', function() { inFormOrLink = true; });

$(window).bind("beforeunload", function() { 
    return inFormOrLink || confirm("Do you really want to close?"); 
})

live方法不适用于提交事件,因此如果添加新表单,则还需要将处理程序绑定到该表单。

请注意,如果其他事件处理程序取消了提交或导航,如果稍后实际关闭该窗口,您将丢失确认提示。您可以通过在submitclick事件中记录时间来检查这一点,并检查beforeunload是否会在几秒钟后发生。

答案 2 :(得分:0)

你真的不能。

$(window).bind('beforeunload', function() { 
    // Do submit here
});

似乎可行,但

a)在前载阶段期间不允许提交常规表单(即,使用POST或GET重定向到另一个页面),因此无法正常工作。

b)AJAX表单提交触发,但你永远不会确定它们会到达,因为浏览器不会等待回调发生,而只是在你的代码运行后关闭窗口