我试图在没有成功的asp.net渲染页面上附加一个form.submit事件处理程序。 我想拦截每个postback,文档说我应该能够做到。 我做错了什么吗?
$(document).ready(function() {
$("form").submit(function() {
alert('Form submit');
debugger;
});
});
不知道你是否还在寻找,但这是我所拥有的解决方案。如果使用stopPropagation()进行事件取消,我不认为它会起作用,但它会让你在提交表单之前运行一些脚本。
<script type="text/javascript">
$(function () {
var oldSubmit = __doPostBack;
var newSubmit = function (eventTarget, eventArgument) {
alert('custom submit function');
return oldSubmit(eventTarget, eventArgument);
};
__doPostBack = newSubmit;
});
</script>
这是我在一个传统的WebForm应用程序上做的事情:
//trigger jquery form submit event handlers on __doPostBack
$(function() {
var oldPostBack = __doPostBack;
__doPostBack = function() {
$("form").triggerHandler("submit");
oldPostBack.apply(this, arguments);
};
});
$("#myForm").submit(function() { alert("submitted!"); });
ASP.NET WebForms通常只包含一个大表单(因此称为Web Forms)。
如果我没记错的话,所有链接和提交按钮都会手动调用__doPostBack函数,因此它会绕过调用表单提交并将该责任委托给__doPostBack函数。
您可能需要覆盖此函数。
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
$(document).ready(function() {
$("form").submit(function() {
alert('Form submit');
});
});
$("form").triggerHandler("submit")
--$("form").submit()
在FireFox上不起作用。 - Denis