我们正在编写一个 ASP.NET MVC 应用程序。默认情况下,如果客户端浏览器具有 Javascript,则页面上每个表单的处理程序由 Javascript 设置为将提交发送到 Ajax“管道”(渐进增强)的处理程序。
但是,对于一个表单(在几个页面上),我希望这个处理程序被绕过/忽略。有没有一种简单的方法可以做到这一点?也许通过直接在 DOM 中指定我自己的 onsubmit 事件或其他方法来覆盖处理程序?
我们使用 jQuery,所以我可以使用这些库。
我们正在编写一个 ASP.NET MVC 应用程序。默认情况下,如果客户端浏览器具有 Javascript,则页面上每个表单的处理程序由 Javascript 设置为将提交发送到 Ajax“管道”(渐进增强)的处理程序。
但是,对于一个表单(在几个页面上),我希望这个处理程序被绕过/忽略。有没有一种简单的方法可以做到这一点?也许通过直接在 DOM 中指定我自己的 onsubmit 事件或其他方法来覆盖处理程序?
我们使用 jQuery,所以我可以使用这些库。
我很可能会通过为违反您的标准的表单(不应该具有 AJAX 行为的表单)分配一些独特的属性来解决这个问题 - 例如class="oldschool"
. 在 JavaScript 代码中,当在表单上连接提交事件处理程序时,我会确保排除任何带有此特殊标记的表单:
$('form:not(.oldschool)').submit(function() {
// Do fancy AJAX stuff
});
更新:为了不更改任何外部 JavaScript 文件,并且只需通过更改 HTML 标记来引入新行为,请考虑执行以下操作:
<form ... onsubmit="if (typeof $ == 'function') $(this).unbind('submit');">
它并不漂亮,但它似乎完成了工作 - 至少在我在这里可用的浏览器中。
尽管我不确定我是否理解“来自 DOM”的意思,但我认为您无法更改原始 ajax/js 代码,但您应该能够在script
设置 ajax 的代码之后的某处插入一个小标签提交处理程序。
进一步假设处理程序集是形式$("form").submit(...)
或类似的,你可以使用这个
$('selectorForYourForm').unbind('submit');
由于它在原始 js 代码之后运行,因此它将取消绑定任何处理程序,该处理程序为该表单的提交操作设置的原始代码。