我想办理submit
一个事件form
使用jQuery元素。
$("form").bind("submit", function() {
alert("You are submitting!");
});
当表单提交(如回发的一部分,例如,当我点击一个按钮或LinkButton的)这永远不会触发。
有没有一种方法,使这项工作? 我可以附加到触发提交的各个元素的事件,但是这不太理想 - 有太多的可能性(例如,使用自动回= 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>
我得到的“文档准备好”的警报,但不是“提交检测”关于LinkButton的点击时。
谢谢,@Ken布朗宁和@russau为指向我在劫持__doPostBack的方向。 我见过几个不同的方法如下:
- 硬编码我自己的版本__doPostBack的,并把它后来在页面上,使其覆盖的标准之一。
- 超载在页面上呈现,并注入自己的自定义代码到现有__doPostBack。
- 充分利用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使
- 它可以采取相同的参数__doPostBack
- 所添加的功能发生之前__doPostBack
- 所添加的功能可以返回false中止回传
我已经成功与有压倒一切的解决方案__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
我自己,这样我可以得到提交事件触发。
IIRC,提交通过JavaScript形式(其中调用时,这是一个问题__doPostBack
办)在IE浏览器(也许其他浏览器太)。
我__doPostBack
更换调用$(theForm).submit()
复制的默认行为(在隐藏的输入馅值)后
我不知道该怎么用jQuery做,但你可以一个OnClientClick属性添加到ASP.NET控件:
<asp:linkbutton id="TestButton" text="Click me!" runat="server" OnClientClick="alert('Submit detected.');" />
如果您使用的.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 = “如果返回false($( '#Form1的')有效的()!);”