如何捕捉提交事件的使用jQuery在ASP.NET 应用程序?
-
22-07-2019 - |
题
我试图处理的 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.我已经看到了几个不同的方法:
- 硬代码我自己版本的__doPostBack,并把它后来在网页上使它复盖的标准之一。
- 过载在网页和注射我自己定义的代码进入现有__doPostBack.
- 利用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这样
- 它可以采取同样的论点为__doPostBack
- 功能正在增加发生之前__doPostBack
- 功能正在增加可以返回的虚假中止回发
其他提示
我已经成功的 一个解决方案压倒一切的 __doPostBack()
以叫一个复盖上 form.submit()
(即 $('form:first').submit(myHandler)
),但我认为这是在设计。作为的ASP.NET 2.0,最简单的解决方法是:
定义javascript功能要运行时的形式被提交即
<script type="text/javascript"> function myhandler() { alert('you submitted!'); } </script>
注册处理程序功能在你的代码隐藏即
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;"