我正在做一些CF开发,我遇到了一个问题。我没想把头撞到键盘上,而是想问一下有经验的人。
所以这就是我正在处理的事情:
<form name="inv" action="action.cfm" method="post" >
<cfoutput query="getQuery">
<input type="checkbox" name="ischecked" value="1" unchecked />
<input type="Hidden" name="DeviceID" value="#DeviceID#">
</td>
<td><font size="3"><b>Device ID:</b></font>#DeviceID#</td>
<td><font size="3"><b>User</b></font>#User#</td>
<td><font size="3"><b>Tag:</b></font>#Tag#</td>
</table>
</cfoutput>
<table>
<tr><td> Action: </td>
<td>
<select name="choose_action">
<option value="1"> Action 1 </option>
<option value="2"> Action 2 </option>
<option value="3"> Action 3 </option>
</select>
<INPUT type="reset" name="reset" action="reset">
<INPUT type="submit" name="submit" action="submit">
</td>
</tr>
所以基本上我有这个表单,它从我的查询输出所有信息(工作正常)并循环并显示它。我希望用户能够查看此信息,单击特定设备的复选框,然后根据底部的菜单执行操作,然后转到操作页面并使用传入的信息执行查询基于cfif循环。
我遇到的问题是我无法弄清楚如何传递用户特意检查的信息,因为它是一个循环。当我提交包含设备ID的隐藏字段时,我最终会提交每个具有复选框的设备ID(每个都是)。复选框值也是如此。它只是将所有查询数据转储到查询中每个设备的操作页面中,而不仅仅是我想要的那个首先检查过的设备ID。
我在想一些后端JS,但我并不完全确定如何做到这一点。 我希望我能在验证之前对其进行验证并说:“如果选中此项,那么只提交此特定的设备ID”
感谢您的时间和反馈!如果我需要澄清任何事情,请告诉我。
答案 0 :(得分:5)
这是2个答案(我已经看过了两个答案)。
首先 - 尝试将设备ID作为复选框“名称”的一部分。
<cfoutput query="getQuery">
<input type="checkbox" name="ischecked_#deviceID#" value="1" unchecked />
</cfoutput>
然后你会像这样循环遍历:
<cfloop collection="#form#" item="fItem">
<cfif listfirst(fItem,'_') IS 'ischecked'>
<cfset thisDeviceID = listlast(fItem,'_')>
...do something with deviceID
</cfif>
</cfloop>
第二种方法是将设备ID存储在“缺陷”表单字段中,如下所示:
<cfoutput query="getQuery">
<input type="checkbox" name="ischecked" value="#deviceID#" unchecked />
</cfoutput>
这些值是一个包含任何已检查内容的列表...因此,如果您的用户检查1,5和7,则可变的#form.isChecked#将是一个看起来像1,5,7的列表。使用listfind或cfloop或其他任何东西来做它。只记得你必须使用check来确保taht form.isChecked存在,因为如果没有检查它将不存在(对于大多数浏览器)。
答案 1 :(得分:1)
有多种方法可以做到这一点,但一般的想法是使用动态字段名称和值...
<input type="checkbox" name="ischecked" value="#DeviceID#" />
<select name="choose_action_#DeviceID#">
同名的多个字段在ColdFusion
中表示为列表<cfloop query="..">
<cfif listfindnocase(form.ischecked, DeviceID)>
<cfif form['choose_action_#DeviceID#'] eq 1>
<cfelseif form['choose_action_#DeviceID#'] eq 2>
etc
</cfif>
</cfif>
</cfloop>