2013-01-21 4 views
5

ich mit einigen alten Code arbeite. Es verwendet die integrierte ColdFusion-Formularvalidierung (d. H. _required ausgeblendete Felder). Ich möchte dem Formular eine Schaltfläche zum Abbrechen hinzufügen. Die Abbrechen-Schaltfläche muss tatsächlich einige Geschäftslogik behandeln (so kann ich location.href nicht einfach auf eine andere Seite setzen). Das Problem ist, dass, weil die Löschtaste eine Absenden-Button ist, löst die integrierte Validierungs und der Benutzer erhält eine Fehlermeldung, dass das Feld erforderlich ist.Gibt es eine Möglichkeit, die integrierte Formularvalidierung von ColdFusion selektiv zu deaktivieren?

Gibt es eine Möglichkeit, die Validierung für diesen bestimmten Submit-Button zu deaktivieren? Ich würde lieber nicht versuchen, den zugrunde liegenden Code zu modifizieren, der das Formular aufbaut, wie es in einer Reihe von Orten verwendet wird. Hier ist eine stark vereinfachte Version meines Code:

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

Eine Sache, die ich dachte an die Onclick der Abbrechen-Taste, um entfernen Sie alle versteckt „_required“ Felder aus dem DOM. Das funktioniert, aber es fühlt sich sehr hacky an. Hier ist die Javascript ich für diesen Ansatz:

<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, könnte Ihre Abhilfe auch 'textarea' inspizieren wollen und' select' Tags?) –

+0

Letztlich ist die beste (und einfachste) Lösung könnte sein, tatsächlich den Code zu ändern, der die Form erzeugt. Während die JS-Lösung, um diese Felder zu entfernen, funktioniert, scheint es "hacky". Wie werden Sie mit der Ausführung des JS umgehen? Müsste das nicht zu dem Code hinzugefügt werden, der das Formular trotzdem generiert? –

+1

Muss die Cancel tatsächlich das Formular senden? Was passiert, wenn Sie die Schaltfläche "Abbrechen" vom Typ "Senden" in den Typ "Schaltfläche" ändern und die Verarbeitung über das Ereignis onclick vornehmen? –

Antwort

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

aber es für die gesamte Anwendung deaktiviert ... Ich bin es nur deaktiviert für eine bestimmte Taste zu wollen – Kip

+3

Wow, wusste nicht, entweder von denen. ** Kip **: Wenn du es komplett deaktivierst, kannst du es selbst richtig umsetzen (es ist überhaupt nicht kompliziert). Außerdem: Sie sind sich bewusst, dass die Validierung durch Formularfeldnamen immer noch genauso unsicher ist wie die clientseitige Validierung ... Wenn Sie noch keine serverseitige _properly_validierung haben, hat Ihre App wahrscheinlich Sicherheitslücken. –

+4

Nachdem Sie dies gesagt haben, können Sie wahrscheinlich Folgendes tun: '' - aber Sie sollten es wirklich richtig beheben. –

Verwandte Themen