Coldfusion 1个表单中的2个提交按钮

Coldfusion 1个表单中的2个提交按钮,coldfusion,Coldfusion,我的表单中有2个提交按钮 <input type="submit" value="Save as Draft"> <input type="submit" value="Save"> 因此,基本上上面的表单所做的是,默认情况下,tx\u name=“,当用户键入某个内容并提交时,它将在\u validate.cfm中执行所有验证,然后转到\u update.cfm进行更新 这是用户单击Save按钮时的预期工作方式。但是,对于另存为草稿,我希望它跳过\u validate

我的表单中有2个提交按钮

<input type="submit" value="Save as Draft">
<input type="submit" value="Save">
因此,基本上上面的表单所做的是,默认情况下,
tx\u name=“
,当用户键入某个内容并提交时,它将在
\u validate.cfm
中执行所有验证,然后转到
\u update.cfm
进行更新

这是用户单击
Save
按钮时的预期工作方式。但是,对于
另存为草稿,
我希望它跳过
\u validate.cfm
,直接将所有表单字段数据带到
\u update.cfm

以下是我尝试的:

尝试1:


我没有使用
,而是使用了
,因为您必须为两个提交按钮添加名称。使用该名称,我们可以防止在通过单击“另存为草稿”按钮提交表单时包含_validate.cfm

此外,表单方法应该是
POST
,这样表单范围将在操作页面上可用,否则它将在URL范围中可用

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

我会选择两个按钮的名称相同,但值不同。我也会使用按钮标签,这样我可以更好地控制显示和提交的值。这样我就不必处理显示是否需要更改,也不必更改处理。最后但并非最不重要的一点是,我将包装它,使其仅在
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>

if(cgi.request_method==“post”){
如果(form.key存在(“tx\u name”)tx\u name=form.tx\u name;
如果form.SaveMode==“Save”)包含“\u validate.cfm”;
如果(form.keyexists(“tx\u name”)包含“\u update.cfm”;
}
另存为草稿
拯救

我使用一个名为
action
的隐藏表单字段。在按钮上,我附加一个onClick以更改
action
的值。在表单的action页面上,我读取该值并确定要执行的操作。例如:

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

拯救
保存并重新加载
取消

有两个提交按钮是一个根本不好的主意。无论是单选按钮还是下拉菜单都是让用户进行选择的一种更好的方法。类似的主题:这应该工作;但是,考虑使用<代码> SeaCysEng存在()/<代码>而不是<代码> ISDealDeD()。
.structKeyExists更精确,性能稍好,并被认为是最佳实践。
的使用被定义为
可能会在未正确使用时使自己受到作用域注入攻击。请参阅:谢谢你,我尝试了这个,它也起了作用。我也尝试了这个版本,它也起了作用,谢谢。
<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>