Sto lavorando con un vecchio codice. Utilizza la convalida dei moduli ColdFusion incorporata (ovvero i campi nascosti _required
). Voglio aggiungere un pulsante Annulla al modulo. Il pulsante di annullamento deve effettivamente gestire alcune logiche di business (quindi non posso semplicemente impostare location.href su un'altra pagina). Il problema è che, poiché il pulsante di annullamento è un pulsante di invio, attiva la convalida incorporata e l'utente riceve un errore sul campo richiesto.Un modo per disattivare selettivamente la convalida del modulo integrata di ColdFusion?
C'è un modo per disattivare la convalida per quel particolare pulsante di invio? Preferirei non provare a modificare il codice sottostante che costruisce il modulo, in quanto viene utilizzato in un sacco di posti. Ecco una versione molto semplificata del mio codice:
<cfif IsDefined("Form.OK")>
You clicked OK!
<cfelseif IsDefined("Form.Cancel")>
You clicked Cancel!
</cfif>
<cfoutput>
<form action="#CGI.Path_Info#" method="POST">
Enter Name: <input type="text" name="Name" value="" /><br/>
<input type="hidden" name="Name_required" value="" />
<input type="submit" name="OK" value="OK" />
<input type="submit" name="Cancel" value="Cancel" />
</form>
</cfoutput>
Una cosa che ho pensato è quello di rendere l'onclick del pulsante Annulla rimuovere eventuali campi nascosti "_required" dal DOM. Funziona, ma sembra molto hacky. Ecco il codice Javascript che ho usato per questo approccio:
<script type="text/javascript">
function removeRequiredFields() {
var els = document.getElementsByTagName('input');
for(var i = 0; i <= els.length; i++) {
if(els[i].type == 'hidden' && els[i].name.endsWith('_required'))
els[i].parentNode.removeChild(els[i]);
}
}
</script>
(btw, la soluzione alternativa potrebbe anche voler controllare i tag 'textarea' e' select'?) –
In definitiva, la soluzione migliore (e più semplice) potrebbe essere quella di modificare effettivamente il codice che genera il modulo. Mentre la soluzione JS per rimuovere quei campi potrebbe funzionare, sembra "hacky". Come gestirai l'esecuzione del JS? Non dovrebbe essere aggiunto al codice che genera comunque il modulo? –
L'annullamento ha effettivamente bisogno di inviare il modulo? Cosa succede se hai cambiato il pulsante Annulla da un tipo 'submit' a un tipo' button' e gestirlo elaborandolo tramite l'evento onclick? –