2013-01-21 7 views
5

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> 
+0

(btw, la soluzione alternativa potrebbe anche voler controllare i tag 'textarea' e' select'?) –

+0

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? –

+1

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? –

risposta

5

CF9 + - Application.cfc

this.serverSideFormValidation="false"; 

http://www.raymondcamden.com/index.cfm/2009/7/12/My-first-ColdFusion-9-scoop--disable-server-side-validation

CF8 - Application.cfc

<cfset this.name = "myApplication"> 
<cfset url.form = structnew()/> 
<cfset structappend(url.form,form)/> 
<cfset structclear(form)/> 
<cffunction name="onRequestStart"> 
    <cfset structappend(form,url.form)/> 
    <cfset structdelete(url,"form")/> 
</cffunction> 

http://www.cfinsider.com/index.cfm/2008/9/30/Getting-Around-ColdFusion-Form-Validation

+1

ma questo lo disabilita per l'intera applicazione ... lo sto solo disabilitando per un tasto specifico – Kip

+3

Wow, non sapevo di nessuno di questi. ** Kip **: se lo disattivi completamente, puoi ri-implementarlo da solo in modo corretto (non è affatto complicato). Inoltre: sei consapevole, spero, che avere la convalida guidata dai nomi dei campi dei moduli sia ancora poco sicuro come la validazione lato client ... Se non hai già la convalida _proper_ sul lato server, la tua app probabilmente ha dei buchi di sicurezza. –

+4

Detto questo, per farlo in modo selettivo puoi probabilmente fare: '' - ma in realtà dovresti correggerlo correttamente. –

Problemi correlati