2011-05-27 149 views
1

控制器操作在$(this).submit()之后不是在completedCallback之后调用。 请参阅下面的代码。 如何在不使用Ajax的情况下提升完成的回调之前触发操作?如何在提交事件中提交“已完成”事件?

控制器:

 

public ActionResult MyFunction(FormCollection data){ 
//this should trigger before calling the CompletedEvent 
} 
 

的JavaScript

 


var flag = false; 

$(form).submit(function(){ 

     if(!flag){ 

     //raise start event 
     startedCallback.call(); 

     flag = true; 
     $(this).submit(); 

     //raise completed event 
     completedCallback.call(); 

} 

}); 

 
+0

没有ajax的意思是什么?你给出的例子是Asynchronous。如果您提交'同步'表单,则意味着该脚本将在$(this).submit()子句后面退出并跟随到表单页面。也许你不想使用xml?或者你使用某种Iframe结构?也许你可以分享一个你想要完成的例子吗? – Arend 2011-06-02 09:25:04

+0

你知道阿伦德和亚当给你唯一的“正确”的答案,你会得到,对吗? – jcolebrand 2011-06-05 22:33:50

回答

7

如果您不想使用ajax,那么在提交后无法可靠地调用某些东西 - 表单的处理完成。如果您想要回复,您必须使用ajax。

如果你想在你的表单提交之前调用你的函数 - 再次..你必须使用某种形式的ajax。

How do I capture response of form.submit

如果你真的需要像这样的活动的控制 - 你需要AJAX或iframe黑客。对不起:)

0

也许你的行动可以返回一个URL变种,像?status=submitted

然后检查你的javascript是否存在var,如果是的话,触发你的completedCallback

顺便说一下,如果您不想要提交表格​​,您应该在$(form).submit(function(){return false;});中返回false

+0

欢迎来到StackOverflow ju k!在内联代码(在文本中)编写代码时,您可以用反勾号将代码包围起来,以避免它与常规文本显示为相同的字体。例如,如果你点击编辑你的答案,你会看到我为你添加了他们的位置。 :) – 2011-06-06 18:52:08