我的表单中包含需要处理的复选框 我想遍历每个选定的选项,但我似乎无法使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版本)
答案 0 :(得分:8)
您误读了代码。它在工作:
当您引用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#