We are writing an ASP.NET MVC application. By default, if the client browser has Javascript, the handler for every form on the page is set, by Javascript, to be one开发者_如何学Go that sends the submission down an Ajax "pipe" (progressive enhancement).
But, for one form (on a page of several), I'd like this handler to be bypassed/ignored. Is there a simple way to do this? Perhaps by overriding the handler by specifying my own onsubmit event directly in the DOM - or some other method?
We use jQuery, so those libraries are available to me.
I would most likely solve this by assigning some distinctive attribute to the form that breaks with your standards (the one that should not have AJAX behavior) - something like class="oldschool"
. In the JavaScript code, when hooking up the submit event handler on forms, I would then make sure to exclude any forms with this special mark:
$('form:not(.oldschool)').submit(function() {
// Do fancy AJAX stuff
});
Update: In order not to change any external JavaScript files, and have the new behavior introduced simply by altering the HTML markup, consider doing something like this:
<form ... onsubmit="if (typeof $ == 'function') $(this).unbind('submit');">
It is no beauty, but it seems to get the job done - at least in the browsers I have available here.
Although I'm not sure I understand what you mean by "from the DOM" I assume you can't change the original ajax/js code but you should be able to insert a little script
tag somewhere which runs after the code that sets the ajax submit handler.
Further assuming that the handler set is in the form $("form").submit(...)
or similar you could use this
$('selectorForYourForm').unbind('submit');
As this runs after the original js code it would unbind any handler the original code set for the submit action of this form.
精彩评论