epi*_*tka 4 asp.net jquery postback webforms
我试图在asp.net呈现的页面上附加一个事件处理程序到form.submit但没有成功.我想拦截每一个回发和doc.说我应该能够.难道我做错了什么?
$(document).ready(function() {
$("form").submit(function() {
alert('Form submit');
debugger;
});
});
Run Code Online (Sandbox Code Playgroud)
不知道你是否还在寻找它,但这是我的解决方案.如果使用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>
Run Code Online (Sandbox Code Playgroud)
这是我在旧版 WebForm 应用程序上所做的事情:
//trigger jquery form submit event handlers on __doPostBack
$(function() {
var oldPostBack = __doPostBack;
__doPostBack = function() {
$("form").triggerHandler("submit");
oldPostBack.apply(this, arguments);
};
});
Run Code Online (Sandbox Code Playgroud)
这允许您以通常的方式使用 jQuery 连接“提交”事件:
$("#myForm").submit(function() { alert("submitted!"); });
Run Code Online (Sandbox Code Playgroud)
典型的 doPostBack 劫持,但只有一次。在执行旧的回发之前,它会在任何表单元素上触发“提交”处理程序。这是必要的,因为虽然 asp.net 确实调用了附加到表单 dom object 的 onsubmit 函数,但它看起来不像 jquery 的事件那样工作。
小智 3
ASP.NET Web 表单通常仅包含在一种大表单中(因此称为“Web 表单”)。
如果我没有记错的话,所有链接和提交按钮都会手动调用 __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>
Run Code Online (Sandbox Code Playgroud)
虽然我试图理解你的“调试器”;你的函数中的行。也许应该是这个?
$(document).ready(function() {
$("form").submit(function() {
alert('Form submit');
});
});
Run Code Online (Sandbox Code Playgroud)