提问人:em_ 提问时间:8/2/2013 更新时间:8/2/2013 访问量:2641
javascript 事件函数如何防止服务器端事件函数(单击按钮)
How the javascript event function can prevent server side event function (button click)
问:
比如说,如果我有一个.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
如果我注释掉后面的代码将触发 - 如果我从未声明一个函数将在使用 javascript 单击时触发,则后面的代码将触发(这些场景是有道理的)return validateFields();
我的问题是(我可能问错了,提前抱歉)为什么 javascript button.click 函数可以防止后面的代码在返回 false 时触发?
我一直学会将客户端和服务器端代码视为单独的逻辑片段,它们实际上不会像这样交织在一起。
我正在寻找的东西不仅仅是“仅仅因为”,这是我从同事那里得到的。
答:
ASP.NET 回发是由一个名为 的 JavaScript 函数完成的,如果您查看页面的源代码,它看起来像这样:__doPostBack
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
评论