2014-04-10 4 views
1

은 내가 선택한 각 옵션을 반복하고 싶지하지만 ColdFusion이 목록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 버전을 사용하고 있습니다)

쉼표

예를 구분 기호에도 불구하고 그러나 그것은 하나의 항목으로 전체 문자열을 선택 유지

답변

8

코드를 읽는 중입니다. 작동 중입니다.

  1. 예상대로입니다.
  2. 정확히 원하는대로!

form.test을 참조하면이 값은 확인란에 선택한 모든 값의 목록입니다. EG : 당신은 ---1,2,3,4을보고있는

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

: 당신이 그들 모두를 검사 한 경우, 그 값은 당신이 코드의이 비트와 함께 자신이 시연된다 1,2,3,4

될 것입니다.

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

그런 다음 i 각 요소를 차례로리스트의 를 취할 것입니다 : IE : 하나는이 같은 목록을 통해 루프하면 form.test1,2,3,4

가 포함되어 있습니다. 그리고 당신도 이것을보고 있습니다.

길이는 7 : "1,2,3,4"은 7 문자입니다. listLen()4입니다.

마지막으로, 일부 코딩 제안 :

  • 범위 당신의 변수 : form.test하지 test
  • 나는이 샘플 코드는 알고 있지만, i 가난한 변수 이름입니다 structKeyExists()
  • 를 사용 isDefined()를 사용하지 않는 이런 맥락에서 (아마도 혼란스러워 할 것입니다.) checkBoxValue이 더 좋을 수도 있습니다. 또는 체크 박스가 나타내는 내용을 나타냅니다.
  • 구분 기호가 쉼표 인 경우 목록 작업 (함수, 루프 등)에 지정할 필요가 없습니다. 쉼표는 이미 기본값입니다.
2

제대로하고 있습니다. INDEX 속성 (이 경우 i)에서 변수를 사용해야합니다. 귀하의 수표에 23,12,78,56의 가치가있는 경우. 그런 다음 각 반복에서 이러한 값을 반환합니다. 당신이 반복 카운터 값을주는 "i"와 혼동하고있는 것처럼 보입니다.

+0

체크 박스의 값을 임의의 숫자로 변경하면보다 선명한 그림을 얻을 수 있습니다 :) –

1

여기에 무슨 문제가 있습니까? 첫 번째 길이는 len() 함수를 사용하여 문자열로 처리하기 때문에 길이가 7입니다.

그러나 얼마나 많은 목록 항목이 있는지 알아 보려면 대신 ListLen을 사용할 수 있습니다. length: #listlen(test)#

두 번째로 반복 할 때 각 목록 항목의 가치를 얻으려고합니까? 전체 목록을 출력 할 때마다 #test#을 출력하십시오. 대신 간단하게 출력 할 수 있습니다. #i#

+0

그런 목록을 반복하면 'i'는 색인이 아니라 요소입니다. . 그래서'listGetAt()'에 대한 필요성은 ... 이미 얻었습니다! –

+0

죄송합니다. 네 말이 맞아! – duncan

관련 문제