对表单提交的确认

时间:2012-02-01 05:13:48

标签: javascript jquery forms

我希望在成功提交表单时显示确认(更确切地说是弹出窗口)。之前我使用Ajax来验证表单并显示弹出窗口,但现在我想实现相同的而不使用Ajax
在成功提交表单后调用javascript / Jquery中是否有任何事件?或者还有其他替代方案吗?

谢谢!


编辑1:
我使用的是Spring 3.0 这是详细的情景
1.用户填写表格并点击提交
2.请求将被发送到控制器(服务器端)
3.验证将在服务器端进行 4.如果存在错误,我将使用Spring验证来显示它并转到步骤1 5.否则成功提交表格并显示弹出窗口 6.用户点击弹出窗口重定向到其他页面后。


编辑2:
我完全同意Ajax是正确/最好的方法,我已经使用Ajax实现了它。但客户希望使用非ajax方法,我不能超越他的话。

4 个答案:

答案 0 :(得分:2)

没有Ajax?没问题 - 让我们回到过去网络过去的工作方式; - )

由于我得到你不想刷新当前页面,这种方法怎么样:

  1. 在同一页面上有一个隐藏的iframe,其名称为& ID
  2. 将表单的target属性指向上一步中给出的名称
  3. 提交表单现在将被“隐藏”
  4. 你可以将iframe上的onload属性设置为你喜欢的javascript方法,一旦表单完成提交就被调用
  5. javascript代码也可以检索iframe的内容并检查服务器端响应(甚至可能包含错误消息)
  6. 通知用户结果
  7. 这一切都很容易设置,让我们知道它是如何工作的。

答案 1 :(得分:2)

这个问题激起了我的好奇心,因为我试图做一些类似使用 Leon的iframe解决方案suggested。最后我成功了,但是,我想建议您不要使用直接的onload属性,而是使用iframe上的jQuery .load() event

编辑:这就是我设置表单的方式(使用HTML5,因此不需要引号):

<div id=message></div> /* Example-specific, see below */

<form method=post action=backend.php target=iframe>
    // Form data here
</form>

<iframe name=iframe></iframe>

我添加了以下CSS代码来隐藏iframe:

iframe {
    border:0px;
    height:0px;
    visibility:hidden;
    width:0px;
}

请勿使用display:none,因为某些浏览器会拒绝提交未显示的元素。

然后在我的$(document).ready() JavaScript ...

$('iframe').load(function(){
  // Your load event here.
});

您也可以更改它,以便它特别仅在特定事件之后触发(例如,如果您使用动态表单)。在这种情况下,您可能希望在.unbind('load')之前使用.load()来阻止之前添加的.load()函数进行调用。

现在提交表单时,它会加载到隐藏的iframe中。当iframe加载页面时(在我的示例中为backend.php),它会触发.load()函数。在我的具体情况下,我设置<div id=message>来显示消息:

$('iframe').load(function(){
    $('#message').html('The form successfully submitted.');
});

答案 2 :(得分:1)

我不确定您编写的是哪种语言。 一个选项 - 使用javascript。

在提交按钮onclick事件(客户端事件)上,如果页面有效,则执行页面验证并显示警告弹出窗口。

<script type="text/javascript">
    function OnSubmitClientClick() {
        Page_ClientValidate();
        if (Page_IsValid) {
             alert('Form has been successfully submitted.');
            return true;
        }
    }
 </script>

答案 3 :(得分:0)

为什么要放弃AJAX方法?没有AJAX,服务器端验证意味着页面重新加载。在页面重新加载时,您将失去客户端(JS)状态。

另一种方法是使用隐藏的框架/ iframe /新窗口在表单提交上执行服务器端验证(可能使用您在问题中引用的弹出窗口)。在我看来,这不是正确的方法(大B)。您可能更喜欢坚持AJAX或使用非AJAX格式提交。