我正在使用Coldfusion MX7,并且有一个基本形式,可以有几个动态添加到表单的元素。它们具有相同的名称,并且都是复选框。表格的一个例子如下:
<form action="index.cfm?action=index.report" method="post" id="reportForm">
<div class="report my">
<ul class="connectWith ui-sortable" id="fieldListSelect" aria-disabled="false">
<li class="field" id="field_profileFn" style="">
<a class="action" id="action_profileFn" href="index.cfm?action=index.filter.profileFn" style="display: block; ">filter</a>
<label for="profileFn">First Name</label>
<input type="checkbox" name="reportItem" id="profileFn" value="profileFn">
</li>
<li class="field" id="field_profileSn" style="">
<a class="action" id="action_profileSn" href="index.cfm?action=index.filter.profileSn" style="display: block; ">filter</a>
<label for="profileSn">Surname</label>
<input type="checkbox" name="reportItem" id="profileSn" value="profileSn">
</li>
<li class="field" id="field_contactDate" style="">
<a class="action" id="action_contactDate" href="index.cfm?action=index.filter.contactDate" style="display: block; ">filter</a>
<label for="contactDate">Contact date</label>
<input type="checkbox" name="reportItem" id="contactDate" value="contactDate">
</li>
</ul>
</div>
</form>
表单发布后,我通过cfdump获得以下内容:
<table class="cfdump_struct">
<tr><th class="struct" colspan="2" onClick="cfdump_toggleTable(this);" style="cursor:hand;" title="click to collapse">struct</th></tr>
<tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">CONTACTDATE_FROM</td>
<td> Thu May 19 2011 00:00:00 GMT+0100 (GMT Daylight Time) </td></tr>
<tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">CONTACTDATE_TO</td>
<td> Thu May 19 2011 00:00:00 GMT+0100 (GMT Daylight Time) </td></tr>
<tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">FIELDNAMES</td>
<td> REPORTITEM[],CONTACTDATE_FROM,CONTACTDATE_TO </td></tr>
<tr><td class="struct" onClick="cfdump_toggleRow(this);" style="cursor:hand;" title="click to collapse">REPORTITEM[]</td>
<td> profileFn,profileSn,contactDate </td></tr>
</table>
报告元素REPORTITEM []并尝试将其作为变量访问:
<cfset testing = form.reportItem[]>
Invalid CFML construct found on line 6 at column 50.
尝试以我期望的方式访问变量时,我得到以下内容:
<cfset testing = form.reportItem>
Element REPORTITEM is undefined in FORM.
我继承了这段代码,它必须先前有效。 Coldfusion尚未升级(显然仍然是CF 7)并且没有其他任何改变了我能想到的服务器端。
我的问题:
答案 0 :(得分:3)
尝试
<cfset testing = form["reportItem[]"]>
这将通过键“reportItem []”获取表单结构。
答案 1 :(得分:0)
据我所知,CF7对此没有任何问题。事实上,我非常确定您的复选框的价值是由浏览器构建的,而不是网络服务器或CF。
这就是我所看到的:
form.variableNamve[]
将无效,因为该值将以逗号分隔的列表形式返回。
如果没有选中复选框,您将遇到未定义的错误,因为如果没有选中具有该名称的复选框,则浏览器将不会提交该变量,因此不会在表单范围中存在。你应该默认这个,并且有几种方法可以做到这一点。
您可以创建一个新的结构,其中复选框名称作为键,空字符串作为值,然后structAppend表单范围。
您可以使用传统的cfparam标记。
您可以添加一个名称相同的隐藏表单字段,并将空字符串作为值添加到表单中。这会强制浏览器返回表单字段,即使没有选中复选框也是如此。
HTH。
答案 2 :(得分:0)
您是通过jQuery ajax发布还是使用普通的提交按钮发布的?我认为jQuery在发布时添加了variablename []但是有办法禁用它。但是在提交按钮的情况下,只有在选中至少一个复选框时,我才会在表单结构中获得复选框。 在这种情况下,始终使用您的默认值cfparam复选框名称。