ColdFusion无法识别逗号分隔符

时间:2014-04-10 10:05:07

标签: 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>

返回:

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

(我正在使用ColdFusion 10 dev版本)

3 个答案:

答案 0 :(得分:8)

您误读了代码。它在工作:

  1. 完全符合预期;
  2. 完全按照你的意愿!
  3. 当您引用form.test时,它将是您在复选框中选择的所有值的列表。 EG:如果您已全部检查过,那么该值将为1,2,3,4

    您正在使用这段代码向自己演示:

     <cfoutput>#i# ---#test#<br /></cfoutput>
    

    您正在查看---1,2,3,4。 IE:form.test包含1,2,3,4

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

    <cfloop index="i" list = "#test#" delimiters="," >
    

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

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

    最后,一些编码建议:

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

答案 1 :(得分:2)

你正确地做到了。您必须在INDEX属性中使用变量(在本例中为i)。如果您的CHECKBOXES的值为23,12,78,56。然后我会在每次迭代中返回这些值。看起来你正在和#34;我&#34;给出迭代计数器值。

答案 2 :(得分:1)

这里的问题是什么?首先,长度为7,因为您通过使用len()函数将其视为字符串。

但是,如果您想知道其中包含多少个列表项,则可以使用ListLen代替,例如 length: #listlen(test)#

其次,你试图在循环时获取每个列表项的值吗?每当您输出整个列表时输出#test#。相反,您只需输出#i#

即可