如何捕获在ASP.NET应用程序中使用jQuery提交事件?(How to capture subm

2019-06-18 01:19发布

我想办理submit一个事件form使用jQuery元素。

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

当表单提交(如回发的一部分,例如,当我点击一个按钮或LinkBut​​ton的)这永远不会触发。

有没有一种方法,使这项工作? 我可以附加到触发提交的各个元素的事件,但是这不太理想 - 有太多的可能性(例如,使用自动回= TRUE,键盘快捷键等dropdownlists)


更新:这是一个最小的测试用例-这是我的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>

我得到的“文档准备好”的警报,但不是“提交检测”关于LinkBut​​ton的点击时。

Answer 1:

谢谢,@Ken布朗宁和@russau为指向我在劫持__doPostBack的方向。 我见过几个不同的方法如下:

  1. 硬编码我自己的版本__doPostBack的,并把它后来在页面上,使其覆盖的标准之一。
  2. 超载在页面上呈现,并注入自己的自定义代码到现有__doPostBack。
  3. 充分利用JavaScript的功能性和增加功能__doPostBack创建一个钩。

前两个看似不理想的一对夫妇的原因(例如,假设在未来别人需要自己添加功能,__doPostBack),所以我用了#3。

addToPostBack功能是一种常见的预jQuery的技术,我用添加功能的变化window.onload,和它运作良好:

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?")
    });
});

编辑:改变addToPostBack使

  1. 它可以采取相同的参数__doPostBack
  2. 所添加的功能发生之前__doPostBack
  3. 所添加的功能可以返回false中止回传


Answer 2:

我已经成功与有压倒一切的解决方案__doPostBack()以呼吁的覆盖form.submit()$('form:first').submit(myHandler)但我认为这是过度设计。 作为ASP.NET 2.0中,最简单的解决方法是:

  1. 定义要当表单提交运行JavaScript函数,即

     <script type="text/javascript"> function myhandler() { alert('you submitted!'); } </script> 
  2. 您的代码隐藏即在注册您的处理函数

     protected override void OnLoad(EventArgs e) { base.OnLoad(e); ScriptManager.RegisterOnSubmitStatement(Page, Page.GetType(), "myHandlerKey", "myhandler()"); } 

就这样! myhandler()将从简单的按钮输入被调用提交和自动__doPostBack()调用一样。



Answer 3:

是啊,这是烦人。 我更换__doPostBack我自己,这样我可以得到提交事件触发。

IIRC,提交通过JavaScript形式(其中调用时,这是一个问题__doPostBack办)在IE浏览器(也许其他浏览器太)。

__doPostBack更换调用$(theForm).submit()复制的默认行为(在隐藏的输入馅值)后



Answer 4:

我不知道该怎么用jQuery做,但你可以一个OnClientClick属性添加到ASP.NET控件:

<asp:linkbutton id="TestButton" text="Click me!" runat="server" OnClientClick="alert('Submit detected.');" />


Answer 5:

如果您使用的.NET Framework 3.5或,你可以在你的服务器端代码中使用ScriptManager.RegisterOnSubmitStatement()。 注册脚本将得到正常呼吁双方提交和DoPostback。

ScriptManager.RegisterOnSubmitStatement(this, this.GetType(), "myKey", "SomeClientSideFunction();");


Answer 6:

这适用于捕捉提交:

$("form input[type=submit]").live("click", function(ev) {
    ev.preventDefault();
    console.log("Form submittion triggered");
  });


Answer 7:

 $(document).ready(function () {

          $(this).live("submit", function () {

                console.log("submitted");
             }
}


Answer 8:

您需要添加的OnClientClick到的LinkBut​​ton

的OnClientClick = “如果返回false($( '#Form1的')有效的()!);”



文章来源: How to capture submit event using jQuery in an ASP.NET application?