我正在try 使用jQuery处理form元素的submit事件.

    $("form").bind("submit", function() {
        alert("You are submitting!");
    });

当表单提交时(作为回发的一部分,例如,当我单击按钮或链接按钮时),这不会触发.

有没有办法让这件事行得通?我可以附加到触发深渊翻滚的单个元素的事件,但这并不理想-有太多的可能性(例如,autopostback=true的下拉列表、键盘快捷键等)


Update:这里是一个最小的测试用例-这是我的ASPX页面的全部内容:

<%@ page language="vb" autoeventwireup="false" %>

<!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>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:scriptmanager id="ScriptManager" runat="server" enablepartialrendering="true">
                <scripts>
                    <asp:scriptreference path="/Standard/Core/Javascript/Jquery.min.js" />
                </scripts>
            </asp:scriptmanager>
            <p>
                <asp:linkbutton id="TestButton" text="Click me!" runat="server" /></p>
        </div>
    </form>

    <script type="text/javascript">
        $(document).ready(function() {
            alert("Document ready.");
            $("form").submit(function() {
                alert("Submit detected.");
            });
        });
    </script>

</body>
</html>

单击链接按钮时,我会收到"文档准备就绪"alert ,但不会收到"已检测到提交"alert .

推荐答案

谢谢,@Ken Browning和@russau为我指明了劫持的方向.

  1. 硬编码我自己版本的__doPostBack,并稍后将其放到页面上,以便它覆盖标准版本.
  2. 重载页面上的呈现,并将我自己的自定义代码注入现有的_doPostBack.
  3. 利用Javascript的功能特性,创建一个钩子,用于向_doPostBack添加功能.

前两个似乎不受欢迎,原因有几个(例如,假设将来其他人需要向__doPostBack添加他们自己的功能),所以我 Select 了#3.

这个addToPostBack函数是我用来将函数添加到window.onload,的常见预jQuery技术的变体,它工作得很好:

addToPostBack = function(func) {
    var old__doPostBack = __doPostBack;
    if (typeof __doPostBack != 'function') {
        __doPostBack = func;
    } else {
        __doPostBack = function(t, a) {
            if (func(t, a)) old__doPostBack(t, a);
        }
    }
};

$(document).ready(function() {
    alert("Document ready.");
    addToPostBack(function(t,a) {
        return confirm("Really?")
    });
});

Edit:更改了addToPostBack,以便

  1. 它可以接受与__doPostBack相同的参数
  2. 正在添加的函数发生在_doPostBack之前
  3. 要添加的函数可以返回False以中止回发

Asp.net相关问答推荐

Visual Studio发布的网站得到错误类型JObject is not defined when page is load on server"''"

Azure DevOps 构建管道正在发布旧的/缓存的构建工件

Windows 命令行中的/p:是什么意思

WebAPI 请求流支持

有没有办法将 onclick 事件添加到 ASP.NET 标签服务器控件?

使用 jQuery 验证插件匹配两个字段

如何从网页 (asp.net) 启动 EXE

使用 JavaScript 更改 ASP.NET 标签的可见性

ASP.NET 在更新面板更新时显示正在加载...消息

stream.CopyTo - 文件为空.网

如何在 ASP.NET 下拉列表中添加选项组?

根据 DropDownList 的值动态启用或禁用RequiredFieldValidator

InvalidOperationException:无法为角色创建 DbSet,因为此类型未包含在上下文模型中

头标记中的内联代码 - ASP.NET

调查 Web.Config 重复部分原因的步骤

使用 NLog 在 ASP.NET Web API 2.1 中进行全局异常处理?

.Net System.Mail.Message 添加多个收件人地址

哪个事件先调用?母版页 Page_Load 或内容页 Page_Load

DataTable 不包含 AsEnumerable 的定义

在 Visual Studio 2012 中调试 .NET Framework 源代码?