嵌入cfloop的ColdFusion表单返回逗号分隔值问题求助
问题描述
现有一个简化的ColdFusion表单项目,需求是点击某一行的DELETE按钮时,仅返回该行对应的行号(例如点击第二行的DELETE按钮,应返回2),但实际提交后返回的是所有行号用逗号分隔的字符串(如1,2,3,4)。
原代码
<h1>HELLO!</h1> <cfif StructKeyExists(FORM,"delete")> <h1><cfoutput>#FORM.thisRow#</cfoutput></h1><cfabort> <cfelse> <cfset count = 4> </cfif> <cfoutput> <cfform action="test4.cfm" id="updateForm2" method="post"> <input type="hidden" name="delete" value="delete"> <table> <cfloop index="row" from="1" to="#count#"> <cfset test=#row#> <tr> <td>A#row#</td> <td>B#row#</td> <td>ROW: #row#</td> <td><input type="submit" name="submit" value="DELETE"></td> </tr> <input type="hidden" name="thisRow" value="#test#"> </cfloop> </table> </cfform> </cfoutput> <h1><cfoutput>#test#</cfoutput></h1>
问题原因
所有行的隐藏域都使用了同一个名称thisRow,表单提交时浏览器会自动将所有同名表单元素的值合并为逗号分隔的字符串,导致后端接收到的是所有行号的集合,而非点击行的对应行号。
简易解决方案
方案1:每行单独创建表单
将每一行的DELETE按钮和对应行号的隐藏域放在独立的表单内,点击按钮时仅提交当前行的表单数据:
<h1>HELLO!</h1> <cfif StructKeyExists(FORM,"delete")> <h1><cfoutput>#FORM.thisRow#</cfoutput></h1><cfabort> <cfelse> <cfset count = 4> </cfif> <cfoutput> <table> <cfloop index="row" from="1" to="#count#"> <cfset test=#row#> <tr> <td>A#row#</td> <td>B#row#</td> <td>ROW: #row#</td> <td> <cfform action="test4.cfm" method="post"> <input type="hidden" name="delete" value="delete"> <input type="hidden" name="thisRow" value="#test#"> <input type="submit" name="submit" value="DELETE"> </cfform> </td> </tr> </cfloop> </table> </cfoutput> <h1><cfoutput>#test#</cfoutput></h1>
方案2:使用按钮传递行号(更简洁)
利用<button>标签的特性,将行号作为按钮的value值,按钮显示文字保持为“DELETE”,后端直接通过FORM.thisRow获取行号:
<h1>HELLO!</h1> <cfif StructKeyExists(FORM,"delete")> <h1><cfoutput>#FORM.thisRow#</cfoutput></h1><cfabort> <cfelse> <cfset count = 4> </cfif> <cfoutput> <cfform action="test4.cfm" id="updateForm2" method="post"> <input type="hidden" name="delete" value="delete"> <table> <cfloop index="row" from="1" to="#count#"> <tr> <td>A#row#</td> <td>B#row#</td> <td>ROW: #row#</td> <td> <button type="submit" name="thisRow" value="#row#">DELETE</button> </td> </tr> </cfloop> </table> </cfform> </cfoutput> <h1><cfoutput>#count#</cfoutput></h1>
内容的提问来源于stack exchange,提问作者Wallace Beasley
相关产品推荐
相关产品推荐

