我试图处理的 submit 事件的一个 form 元件采用的!

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

这从来没有火灾当的形式提交(因为一部分的回发的,例如当我按一个按钮或linkbutton).

是否有办法使这项工作?我可以附上的事件的各个要素触发的提交,但是这是不太理想-有太多的可能性(例如dropdownlists与autopostback=true、快捷键,等等。)


更新: 这里有一个小测试的情况-这个是全部内容,我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>

我得到的"文档准备好了"警报,但不是"提交检测出的"当击linkbutton.

有帮助吗?

解决方案

谢谢,@肯*布朗宁和@russau指着我的方向劫持__doPostBack.我已经看到了几个不同的方法:

  1. 硬代码我自己版本的__doPostBack,并把它后来在网页上使它复盖的标准之一。
  2. 过载在网页和注射我自己定义的代码进入现有__doPostBack.
  3. 利用Javascript的职能性质,并创建一个钩,用于添加功能,以__doPostBack.

前两个似乎不希望有几个原因(例如,假定在未来其他人需要添加自己的功能至doPostBack),所以我已经与#3.

addToPostBack 功能是一个变化的一个共同的预。。技术的使用添加功能 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. 功能正在增加可以返回的虚假中止回发

其他提示

我已经成功的 一个解决方案压倒一切的 __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() 电话一样的。

是啊,这是令人讨厌。我替换 __doPostBack 我自己这样我就可以得到提交事件火。

请参考,这个问题提交时的形式通过javascript(其中呼吁 __doPostBack 做)在即(也许其他浏览器也是如此)。

__doPostBack 替换电话 $(theForm).submit() 后将默认的行为(馅值在隐藏的投入)

我不知道如何做到这一字,但是你可以添加一个OnClientClick财产ASP.NET 控制:

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

如果您使用。净框架3.5或起来,可以使用 ScriptManager.RegisterOnSubmitStatement() 在你的服务器方的代码。注册脚本会得到称,双方在正常的提交和对DoPostback.

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

这适用于捕捉提交:

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

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

                console.log("submitted");
             }
}

你需要添加OnclientClick到linkbutton

OnClientClick="if(!$('#form1').有效的())return false;"

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top