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

我正在尝试使用jQuery处理form元素的submit事件。

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

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

有没有办法让这项工作? 我可以附加触发提交的各个元素的事件,但这不太理想 – 有太多的可能性(例如具有autopostback = true的下拉列表,键盘快捷键等)


更新:这是一个最小的测试用例 – 这是我的aspx页面的全部内容:

        

$(document).ready(function() { alert("Document ready."); $("form").submit(function() { alert("Submit detected."); }); });

我收到“文档就绪”警报,但在点击链接按钮时没有“提交检测到”。

谢谢,@ Ken Browning和@russau将我指向了劫持__doPostBack的方向。 我已经看到了几种不同的方法:

  1. 硬编码我自己的__doPostBack版本,稍后将其放在页面上,以便覆盖标准版本。
  2. 在页面上重载渲染并将我自己的自定义代码注入现有的__doPostBack。
  3. 利用Javascript的function特性,创建一个钩子,为__doPostBack添加function。

前两个似乎是不受欢迎的,原因有两个(例如,假设将来其他人需要将自己的function添加到__doPostBack),所以我已经选择了#3。

这个addToPostBack函数是我用来向window.onload,添加函数的常见pre-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以中止回发

我已经成功解决了覆盖__doPostBack()以便在form.submit()上调用覆盖(即$('form:first').submit(myHandler) ),但我认为它过度设计了。 从ASP.NET 2.0开始,最简单的解决方法是:

  1. 定义要在提交表单时运行的javascript函数,即

      
  2. 在代码隐藏中注册您的处理函数即

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

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

是的,这很烦人。 我将__doPostBack替换为我自己的,以便我可以获取提交事件。

Iirc,这是在IE中提交表单(调用__doPostBack做)的问题(也许是其他浏览器)。

我的__doPostBack替换在复制默认行为(隐藏输入中的填充值$(theForm).submit()后调用$(theForm).submit()

我不知道如何使用jQuery,但你可以将一个OnClientClick属性添加到ASP.NET控件:

  

如果您使用的是.NET Framework 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’)。valid())return false;”