确认的形式提交

问题描述:

我想显示一个确认(更准确地说是弹出式)时,形式是成功submitted.Previously我使用Ajax验证表单和显示弹出,但现在我想达到同样的没有Ajax
在成功提交表单后调用javascript/jquery中是否有任何事件?还是有其他可用的替代方案吗?确认的形式提交

谢谢!


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


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

+0

无AJAX发送是往返服务器。页面重新加载。除此之外别无选择。那么,您是在寻找页面重新渲染的模式,还是在您提交表单提交“请稍候,我们提交您的数据”时阻止用户界面? – 2012-02-01 05:17:39

+0

@飞溅-X:我要像展示的通知'形式是成功submitted.' – xyz 2012-02-01 05:25:03

+2

您正在使用什么服务器端语言?无论您需要将表单内置到您提交表单后呈现的页面中的语言如何,如果您选择重新加载他们刚刚提交的同一页面,并显示您选择的消息泡泡。您希望使用的插件类型取决于您希望显示消息的方式。如果你想要一个模式,你可以使用jQuery UI模式,Fancybox或事件BlockUI。你也可以选择使用你的服务器端语言来渲染出你的信息的div或p。 – 2012-02-01 05:33:22

这个问题引起了我的好奇心,我试图做同样的事情用iframe解决方案suggested通过Leon。最后,我成功了,但是,我想建议,而不是使用直接onload属性,利用jQuery .load() event上的iframe中。

编辑:因此,这里是我如何设置的形式(使用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')​​之前,以防止调用预先添加的​​功能。

现在提交表单时,它加载到隐藏的iframe。当IFRAME加载页面(backend.php,在我的例子),它触发​​功能。在我的具体情况下,我设置了一个<div id=message>以显示一条消息:

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

感谢您的建议。你能否添加一些关于你如何做的更多信息? – xyz 2012-02-04 05:20:02

+0

我已经添加了一些更多的编码细节,以及我如何确认表单提交的具体示例。请注意,加载到iframe中的后端页面甚至不需要返回任何内容,除非您特别需要它。只要它返回,代码将在表单提交后触发。 – Meshaal 2012-02-04 09:37:14

我不确定你正在编码哪种语言。 一个选项 - 使用javascript。

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

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

我正在使用服务器端验证。 – xyz 2012-02-01 06:14:01

+0

您仍然可以执行服务器端验证。这将在提交时首先执行客户端验证,如果页面有效,则显示弹出窗口,然后执行服务器端验证。 – NomadTraveler 2012-02-01 06:19:35

+0

请检查我的编辑。我想在服务器端验证后显示弹出窗口。 – xyz 2012-02-01 06:21:26

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

一种替代方法是使用隐藏框架/ iframe /新窗口在表单提交上执行服务器端验证(可能使用您在问题中提到的弹出窗口)。在我看来,这不是正确的方法(A BIG NO)。您可能更愿意坚持使用AJAX,或者使用非AJAX的表单提交方式。

+0

感谢您的意见。我完全同意它,我已经以相同的方式实施它,但客户回答了A BIG NO,并要求(命令)将其删除。 – xyz 2012-02-01 08:38:25

没有Ajax?没问题 - 让我们回去如何在Web真正使用在过去;-)

工作因为我得到你不想刷新当前页面,这个怎么样的方法:

  1. 具有相同的页面上隐藏的iframe,一个名字& ID
  2. 点表单的目标属性,以在上一步
  3. 提交表单现在将“隐藏”
  4. 你可以给名称iframe上的onload属性设置为javascript会见你喜欢的HOD到被调用,一旦形成最终提交
  5. 的JavaScript代码也可以检索iframe的内容,并检查你的服务器端的响应(甚至包括错误MSG)
  6. 通知用户有关导致

这一切很容易设置,让我们知道它是如何工作的亚..

+0

正在提交到隐藏的iframe? *是* Ajax。 – Quentin 2012-02-01 09:15:15

+1

提交给隐藏的iframe不是AJAX。 – ch4nd4n 2012-02-01 11:10:35