0

如果我有一个 .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 函数可以在返回false 时阻止后面的代码触发?

我一直学会将客户端和服务器端代码视为独立的逻辑片段,它们不会像这样交织在一起。

我正在寻找的不仅仅是“仅仅因为”,这是我从同事那里收到的。

4

1 回答 1

2

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并且您的回发不会发生。

于 2013-08-01T19:07:49.923 回答