如果我有一个.aspx页面,其中有一个名为“btnProcess”的按钮:
asp:imagebutton id="btnProcess" onmouseover="src='siteart/addpayment2.gif'" tabIndex="13" onmouseout="src='siteart/addpayment1.gif'" Runat="server" Width="88" Height="22" ImageUrl="siteart/addpayment1.gif" AlternateText="Add Payment Button (CTRL + Plus(+))"
使用jQuery,如果我想在按下时将一个函数链接到该按钮,我可以这样写:
$(document).ready(function () {
$('#btnProcess').click(function () {
return validateFields();
});
});
如果validateFields()
返回False
,则背后的代码为:
Private Sub btnProcess_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnProcess.Click
将不开火。反之亦然,如果validateFields()
返回True
如果我注释掉return validateFields();
后面的代码会触发 - 如果我从来没有声明一个会在点击javascript时触发的函数,那么后面的代码将会触发(这些场景是有意义的)
我的问题是(我可能会问错了,提前抱歉) 为什么 javascript button.click函数可以防止后面的代码在返回时触发假?
我总是学会将客户端和服务器端代码视为真正不会像这样交织在一起的各个逻辑部分。
我正在寻找的东西比“只是因为”这是我从同事那里收到的。
答案 0 :(得分:1)
ASP.NET回发由名为__doPostBack
的JavaScript函数完成,如果您查看页面的来源,它看起来像这样:
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
注意:如果您必须确定哪个控件导致了回发,那么__EVENTTARGET
名称应该看起来很熟悉。在您的代码隐藏中,您将得到导致回发的控件名称,如下所示:Page.Request.Params.Get("__EVENTTARGET");
正如您所看到的,这会将表单提交给服务器,这就是我们所说的回发。
使用return false;
或event.preventDefault()
短暂拨打__doPostBack
,您的回发不会发生。