动态验证复选框并将特定查询数据传递到操作页面?

时间:2012-04-18 15:44:42

标签: html sql coldfusion

我正在做一些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”

感谢您的时间和反馈!如果我需要澄清任何事情,请告诉我。

2 个答案:

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