2013-01-21 11 views
5

Pracuję z pewnym starym kodem. Korzysta z wbudowanego sprawdzania poprawności formularza ColdFusion (tj. Ukrytych pól _required). Chcę dodać przycisk anulowania do formularza. Przycisk anulowania musi obsłużyć jakąś logikę biznesową (więc nie mogę po prostu ustawić go jako location.href na innej stronie). Problem polega na tym, że ponieważ przycisk anulowania jest przyciskiem przesyłania, wyzwala to wbudowane sprawdzanie poprawności, a użytkownik otrzymuje błąd, że pole jest wymagane.W jaki sposób można selektywnie wyłączyć walidację formularzy ColdFusion?

Czy istnieje sposób wyłączenia sprawdzania poprawności dla tego konkretnego przycisku przesyłania? Wolałbym nie modyfikować kodu źródłowego, który buduje formularz, ponieważ jest używany w wielu miejscach. Tutaj jest znacznie uproszczona wersja mojego kodu:

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

Jedna rzecz, że myślałem o to, aby onclick przycisku Cancel usunąć wszelkie ukryte „_required” pól z DOM. To działa, ale wydaje się bardzo hacky. Oto JavaScript Użyłem do tego podejścia:

<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

(przy okazji, twoje obejście może również chcieć sprawdzić znaczniki 'textarea' i' select'?) –

+0

Ostatecznie najlepszym (i najłatwiejszym) rozwiązaniem może być faktycznie zmiana kodu, który generuje formularz. Chociaż rozwiązanie JS do usuwania tych pól może działać, to wygląda na "hacky". Jak poradzisz sobie z tym, żeby JS został wykonany? Czy nie musiałoby to zostać dodane do kodu generującego formularz? –

+1

Czy anulowanie faktycznie wymaga przesłania formularza? Co się stanie, jeśli zmienisz przycisk Anuluj z typu "submit" na typ "button" i obsłuż go za pomocą zdarzenia onclick? –

Odpowiedz

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

ale to wyłącza go dla całej aplikacji ... po prostu chcę go wyłączyć dla konkretnego przycisku – Kip

+3

Wow, nie wiedziałem o żadnej z nich. ** Kip **: Jeśli całkowicie go wyłączysz, możesz go ponownie wdrożyć samodzielnie (to wcale nie jest skomplikowane). Ponadto: mam świadomość, mam nadzieję, że posiadanie sprawdzania poprawności za pomocą nazw pól formularza jest nadal tak samo niebezpieczne, jak sprawdzanie poprawności po stronie klienta ... Jeśli nie masz jeszcze _proper_ walidacji po stronie serwera, twoja aplikacja prawdopodobnie ma luki w zabezpieczeniach. –

+4

Powiedziawszy to, możesz zrobić to wybiórczo prawdopodobnie: '' - ale naprawdę powinieneś naprawić to poprawnie. –

Powiązane problemy