如何在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的方向。 我已经看到了几种不同的方法:
- 硬编码我自己的__doPostBack版本,稍后将其放在页面上,以便覆盖标准版本。
- 在页面上重载渲染并将我自己的自定义代码注入现有的__doPostBack。
- 利用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以便
- 它可以采用与__doPostBack相同的参数
- 正在添加的函数发生在__doPostBack之前
- 添加的函数可以返回false以中止回发
我已经成功解决了覆盖__doPostBack()
以便在form.submit()
上调用覆盖(即$('form:first').submit(myHandler)
),但我认为它过度设计了。 从ASP.NET 2.0开始,最简单的解决方法是:
-
定义要在提交表单时运行的javascript函数,即
-
在代码隐藏中注册您的处理函数即
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;”
- 无法使用jQuery获取多个asp:RadioButtonList的选定值
- 如何在Javascript中向用户显示是/否消息框?
- jQuery addClass onClick
- jQuery-AJAX调用ASP.NET页面方法。 如何将值返回jQuery?
- 从后面的代码调用javascript方法
- 使用Angularjs连接到signalr时出现404错误
- 我可以使用JavaScript / JQuery将上传的文件添加到ASP.NET中的Request.Files吗?
- 如何使用JQuery,按ID和ASP.NET选择元素,而不在代码中放置ctl00_
- 如何用jquery ajax请求替换部分asp.net页面?