如果我的自定义jQuery验证返回false,我将尝试在表单提交时停止回发。
有没有办法防止__doPostback()函数从submit()函数内部结束?
我曾假设:
$('#aspnetForm').submit(function () { return false; });可以做到这一点,但显然情况并非如此:有没有人有建议?
submit()函数确实阻止了回发(如果您在firebug中的断点处暂停,它将不会回发),但我似乎无法阻止submit()函数完成后发生的事件!
干杯,艾德
编辑
好吧,我很快就弄乱了,发现我用来引发回发的按钮被绑定到一个updatepanel作为异步回发触发器,这似乎是问题所在:如果我把它作为触发器移除(也就是让它产生一个完整的回发),用return false阻止回发是没有问题的;
你知道为什么使用return false不能停止异步回发吗?
发布于 2010-03-11 20:21:25
您必须使用客户端PageRequestManager来正确处理AJAX提交事件。(例如,阻止异步回发。)
如果您不能完全控制页面,页面上可能有JavaScript,它只调用__doPostBack(),而不经过任何页面逻辑。在这种情况下-除了上面的-,你还必须存储旧的window.__doPostBack()并提供你自己的-就像@tucaz在他的评论中提到的那样。(正如您所提到的...and,链接可能会让人非常困惑。)对于常规提交(非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>发布于 2010-03-11 19:00:59
$('#yourPostButton').click(function(){
return false;
});这应该可以了!
https://stackoverflow.com/questions/2424327
复制相似问题