jQuery:form.submit(fn)不能与Asp.net一起使用?

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)

Bil*_*Rob 6

不知道你是否还在寻找它,但这是我的解决方案.如果使用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)


Inv*_*con 5

这是我在旧版 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)