0

我正在使用 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),我能想到的服务器端也没有任何变化。

我的问题:

  • 这只是CF7的限制吗?
  • 这应该可以正常工作还是完全错误?
  • 如果这不起作用,我将不得不重新编写相当多的代码,在发布数据后处理它会更容易编码。修改表格会比较费力,有可能吗?
4

3 回答 3

3

尝试做

<cfset testing = form["reportItem[]"]>

这将通过键“reportItem[]”获取表单结构。

于 2011-05-19T16:31:19.103 回答
0

据我所知,CF7对此没有任何问题。事实上,我很确定您的复选框的值是由浏览器构造的,而不是网络服务器或 CF。

这是我看到的:

form.variableNamve[]

将不起作用,因为该值以逗号分隔列表的形式返回。

如果没有选中复选框,您将遇到未定义的错误,因为如果没有选中具有该名称的复选框,则浏览器不会提交该变量,因此不会存在于表单范围内。您应该默认它,并且有几种方法可以做到这一点。

您可以创建一个新结构,其中复选框名称作为键,空字符串作为值,然后 structAppend 在其顶部的表单范围。

您可以使用传统的 cfparam 标签。

您可以将具有相同名称和空字符串的隐藏表单字段添加为表单的值。这会强制浏览器返回表单域,即使没有选中任何复选框。

HTH。

于 2011-05-19T17:46:39.467 回答
0

您是通过 jQuery ajax 发布还是使用普通提交按钮。我认为 jQuery 在发布时添加了变量名 [],但有办法禁用它。但是在提交按钮的情况下,只有当至少一个复选框被选中时,我才会在表单结构中获得复选框。在这种情况下,始终使用您的默认值 cfparam 复选框名称。

于 2011-05-20T08:53:22.160 回答