Bypassare Javascript gestore di moduli
-
21-09-2019 - |
Domanda
Stiamo scrivendo un'applicazione ASP.NET MVC. Per impostazione predefinita, se il browser del client ha Javascript, il gestore per ogni modulo nella pagina è impostato, da JavaScript, per essere uno che manda giù la presentazione di una "pipe" Ajax (progressive enhancement).
Ma, per una forma (in una pagina di più), mi piacerebbe questo gestore per essere bypassato / ignorato. C'è un modo semplice per fare questo? Forse l'override del gestore specificando mia onsubmit direttamente nel DOM -? O qualche altro metodo
Usiamo jQuery, quindi queste librerie sono disponibili per me.
Soluzione
avrei molto probabilmente risolvere questo assegnando un attributo distintivo per la forma che rompe con i vostri standard (quello che non dovrebbe avere un comportamento AJAX) - qualcosa come class="oldschool"
. Nel codice JavaScript, quando agganciando il gestore di eventi presentare su moduli, Vorrei poi fare in modo di escludere qualsiasi forma con questo marchio speciale:
$('form:not(.oldschool)').submit(function() {
// Do fancy AJAX stuff
});
Aggiornamento: Per non per modificare qualsiasi file JavaScript esterno, e hanno il nuovo comportamento introdotto semplicemente modificando il codice HTML, in considerazione di fare qualcosa di simile:
<form ... onsubmit="if (typeof $ == 'function') $(this).unbind('submit');">
Non è una bellezza, ma sembra per ottenere il lavoro fatto -. Almeno nei browser che ho a disposizione qui
Altri suggerimenti
Anche se non sono sicuro di capire cosa si intende per "dal DOM" Suppongo che non è possibile cambiare il codice originale ajax / js ma si dovrebbe essere in grado di inserire un po 'di tag script
da qualche parte che corre dopo il codice che imposta l'Ajax presentare gestore.
Inoltre supponendo che il set gestore è in forma $("form").submit(...)
o simile si potrebbe usare questo
$('selectorForYourForm').unbind('submit');
Dato che questo viene eseguito dopo il codice originale js sarebbe sciogliere qualsiasi gestore il codice originale impostato per presentare l'azione di questa forma.