如果我的自定义jQuery验证返回false,我试图在表单提交上停止回发.
有没有办法阻止__doPostback()函数在submit()函数内完成?
我假设:
$('#aspnetForm').submit(function () { return false; });
会做的伎俩,但显然事实并非如此:有没有人有建议?
submit()函数会阻止回发(如果你在firebug中的断点暂停,它不会回发),但是我似乎无法在submit()函数完成后停止事件发生!
干杯,艾德
编辑
好吧,我有一个快速的混乱,并发现我用来导致回发的按钮与更新面板绑定作为asyncpostbacktrigger的事实似乎是问题:如果我将其作为触发器删除(即导致它产品一个完整的回发),没有问题阻止回发与返回false;
任何想法为什么异步回发不会使用return false停止?
解决方法
您必须使用客户端
PageRequestManager
来正确处理AJAX提交事件. (例如,防止异步回发.)
如果您无法完全控制页面,则页面上可以有JavaScript,只需调用__doPostBack()而无需通过任何页面逻辑.
在这种情况下 – 除了上述之外 – 你必须存储旧窗口.__ doPostBack()并提供你自己的 – 在他的评论中提到的@tucaz.
(……正如你所提到的,链接会让人感到非常困惑.)
对于常规提交(非AJAX),您可以像其他人指出的那样提供事件处理程序.
This page可能有帮助,并且有一些使用PageRequestManager
的代码示例.特别是:
initialize : function() { ... this._onSubmitHandler = Function.createDelegate(this,this._onSubmit); this._onPartialUpdateEnd = Function.createDelegate(this,this._onUpdateEnd); if (typeof(Sys.WebForms)!== "undefined" && typeof(Sys.WebForms.PageRequestManager)!== "undefined") { Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements,this._onSubmitHandler); Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._onPartialUpdateEnd); } else $addHandler(document.forms[0],"submit",this._onSubmitHandler); },
编辑:
按照上面的说法,这对我来说很好(.Net 3.5 SP1,Button1在updatepanel中触发等等):
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.js" charset="utf-8" type="text/javascript"></script> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <div> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> </div> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="Button1" /> </Triggers> </asp:UpdatePanel> </form> <script type="text/javascript"> (function($,undefined) { var submitHandler = function(e) { return false; } if (typeof (Sys.WebForms) !== "undefined" && typeof (Sys.WebForms.PageRequestManager) !== "undefined") { Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements,submitHandler); } else { $("form").submit(submitHandler); } })(jQuery); </script> </body> </html>