2017-03-28 3 views
0

Ich habe 2 Senden-Schaltflächen in meinem Formular.2 Übermitteln von Schaltflächen in 1 Formular

<input type="submit" value="Save as Draft"> 
<input type="submit" value="Save"> 

Im Grunde, was ich will zu tun ist, wenn der Benutzer auf Save as Draft klickt, wird es gehen alle Details um die Form zu _update.cfm bringen (ohne Validierung) und wenn der Benutzer auf Save klickt, wird es fortfahren zu _validate.cfm und dann zu _update.cfm (Validierung und Aktualisierung der Datenbank.)

HTML:

<cfset tx_name = ""> 

<cfif isDefined("form.tx_name")> 
    <cfset tx_name = form.tx_name> 
</cfif> 

<cfinclude template="_validate.cfm"> 

<cfif isDefined("form.tx_name")> 
    <cfinclude template="_update.cfm"> 
</cfif> 

<form name="something"> 
    <input type="text" name="tx_name" value="#tx_name#"> 
    <input type="submit" value="Save as Draft"> 
    <input type="submit" value="Save"> 
</form> 

Also im Grunde, was die obige Form tut, ist, dass standardmäßig, tx_name = " " und wenn der Benutzer etwas eingibt und eingibt, wird die gesamte Validierung in _validate.cfm durchgeführt und dann zu _update.cfm fortgefahren, um es zu aktualisieren.

Dies ist die beabsichtigte Arbeitsweise, wenn der Benutzer auf die Schaltfläche Save klickt. Für Save as Draft, möchte ich jedoch die _validate.cfm überspringen und alle Formularfelderdaten direkt auf _update.cfm bringen.

Die folgende ist, was ich versucht:

Versuch 1:

Statt <input type="submit" value="Save as Draft"> zu haben, habe ich <input type="button" value="Save as Draft" onClick="location.href='_update.cfm';". Und das brachte die Formularfelder nicht zu _update.cfm und ich fand den Grund, es ist, weil es nur auf _update.cfm bei Klicken auf die Schaltfläche umleitet.

Das hat mich dazu gebracht, zu denken, dass ich wirklich eine submit Schaltfläche brauche (um Formulardaten auf die _update.cfm Seite zu bringen).

Aber hier ist, wo ich verloren bin, wie ich jetzt 2 senden Schaltflächen habe. 1 davon ist mit _validate.cfm zu arbeiten und der andere ohne _validate.cfm zu arbeiten.

Also wie gehe ich vor zu Save as Draft nicht validieren, aber aktualisieren und Save validieren und aktualisieren?

+0

Mit zwei Submit-Buttons eine grundsätzlich schlechte Idee sind. Entweder Optionsfelder oder ein Dropdown-Menü ist eine bessere Möglichkeit, um Benutzer zu einer Auswahl zu bewegen. –

+0

Ähnliches Thema: http://ux.stackexchange.com/questions/53759/form-with-both-save-and-submit-buttons –

Antwort

2

Dafür müssen Sie Namen für die zwei Senden-Schaltflächen hinzufügen. Und mit diesem Namen können wir die Einbindung von _validate.cfm verhindern, indem Sie das Formular durch Klicken auf die Schaltfläche "Als Entwurf speichern" absenden.

Auch die Formularmethode sollte POST sein, damit der Formularbereich auf der Aktionsseite verfügbar ist, andernfalls wird er im URL-Bereich verfügbar sein.

<cfset tx_name = ""> 

<cfif isDefined("form.tx_name")> 
    <cfset tx_name = form.tx_name> 
</cfif> 

<cfif isdefined("form.Save")> 
    <cfinclude template="_validate.cfm"> 
</cfif> 

<cfif isDefined("form.tx_name")> 
    <cfinclude template="_update.cfm"> 
</cfif> 

<form name="something" method="post"> 
    <input type="text" name="tx_name" value="#tx_name#"> 
    <input type="submit" name="SaveAsDraft" value="Save as Draft"> 
    <input type="submit" name="Save" value="Save"> 
</form> 
+1

Dies sollte funktionieren; Verwenden Sie jedoch 'strucKeyExists()' und nicht 'isDefined()'. structKeyExists ist genauer, hat eine etwas bessere Leistung und gilt als Best Practice. Die Verwendung von 'isDefined' kann sich bei nicht ordnungsgemäßer Verwendung möglicherweise für Angriffe auf den Umfang der Injektion öffnen. Siehe: https://www.petefreitag.com/item/834.cfm – beloitdavisja

3

Ich würde die Straße von beiden Tasten mit dem gleichen Namen, aber einen anderen Wert gehen. Ich würde auch Button-Tags verwenden, um eine bessere Kontrolle über das Display im Vergleich zum übergebenen Wert zu haben. Ich müsste mich dann nicht damit befassen, wenn das Display wechseln müsste, ich müsste die Bearbeitung nicht ändern. Last but not least möchte ich es wickeln, so dass es funktioniert nur in post

<cfscript> 
if (cgi.request_method == "post") { 

    if (form.keyexists("tx_name") tx_name = form.tx_name; 

    if form.SaveMode == "Save") include "_validate.cfm"; 

    if (form.keyexists("tx_name") include "_update.cfm"; 
    } 
</cfscript> 

<form name="something" method="post"> 
    <input type="text" name="tx_name" value="#tx_name#"> 
    <button type="submit" name="SaveMode" value="Save as Draft">Save As Draft</button> 
    <button type="submit" name="SaveMode" value="Save">Save</button> 
</form> 
+0

Ich habe diese Version auch versucht und es hat funktioniert, danke. – gosi123

2

verwende ich ein verborgenes Formularfeld action genannt. Auf den Buttons befestige ich einen onClick um den Wert von action zu ändern. Auf der Aktionsseite des Formulars habe ich diesen Wert gelesen und festgestellt, was zu tun ist.EX:

<input type="hidden" name="action" value="save" id="action"> 
<button type="submit" class="button button-basic-green" onclick="document.getElementById('action').value='save';"><span class="fa fa-save"></span> Save</button> 
<button type="submit" class="button button-basic" onclick="document.getElementById('action').value='reload';"><span class="fa fa-repeat"></span> Save & Reload</button> 
<button type="submit" class="button button-basic" onclick="document.location.href='./';return false;"><span class="fa fa-arrow-circle-o-left"></span> Cancel</button> 
+0

Vielen Dank dafür, ich habe es versucht und es hat auch funktioniert. – gosi123

Verwandte Themen