ColdFusion无法识别逗号分隔符

ken*_*r99 1 forms coldfusion coldfusion-10

我有一个带有需要处理的复选框的表单我想循环遍历每个选定的选项但我似乎无法使ColdFusion将HTML复选框字段识别为列表

因此,如果有人选择了选项1和2,我应该能够遍历逗号分隔的提交值列表.但是,尽管使用逗号分隔符,它仍然将整个字符串选为单个条目

例:

<form action="" method="get">
<input name="test" type="checkbox" value="1" checked="checked" />Option1<br>
<input name="test" type="checkbox" value="2" checked="checked" />Option2<br>
<input name="test" type="checkbox" value="3" checked="checked" />Option3<br>
<input name="test" type="checkbox" value="4" checked="checked" />Option4<br>
<input name="" type="submit" />
</form>


<cfif IsDefined("test")>
<cfoutput> lenght: #len(test)#<br>
#test#
</cfoutput><br />
<cfloop index="i" list = "#test#" delimiters="," >           
        <cfoutput>#i# ---#test#<br /></cfoutput>
</cfloop>
</cfif>
Run Code Online (Sandbox Code Playgroud)

收益:

lenght: 7 
1,2,3,4 
1 ---1,2,3,4
2 ---1,2,3,4
3 ---1,2,3,4
4 ---1,2,3,4
Run Code Online (Sandbox Code Playgroud)

(我正在使用ColdFusion 10 dev版)

Ada*_*ron 8

你误读了你的代码.它的工作原理是:

  1. 完全符合预期;
  2. 完全按照你的意愿!

当您引用时form.test,它将是您在复选框中选择的所有值的列表.EG:如果你已经全部检查过,那么价值就是1,2,3,4

您正在使用以下代码向自己演示:

 <cfoutput>#i# ---#test#<br /></cfoutput>
Run Code Online (Sandbox Code Playgroud)

你看到了---1,2,3,4.IE:form.test包含1,2,3,4

当一个循环遍历这样的列表:

<cfloop index="i" list = "#test#" delimiters="," >
Run Code Online (Sandbox Code Playgroud)

然后依次获取列表的i每个元素.你也看到了这一点.

form.test确实是7:长度"1,2,3,4"是七个字符.listLen()会给你的4.

最后,一些编码建议:

  • 范围你的变量:form.testtest
  • 不要使用isDefined(),使用structKeyExists()
  • 我知道这是示例代码,但i在这种情况下是一个糟糕的变量名称(可能会让你感到困惑),checkBoxValue可能会更好.或者指示复选框代表什么的东西.
  • 如果您的分隔符是逗号,则无需在列表操作(函数,循环等)中指定它.逗号已经是默认值.