2011-09-21 11 views
0

체크 박스가 체크 된 상태이거나 체크되지 않은 경우에 값을 전달하려고합니다.체크 박스/체크되지 않은 체크 박스

그러나 검사되지 않은 상태는 통과하지 못했습니다. 내가 사용하고있는 코드는 다음과 같습니다 : 놀랍게도 '오프'값을 보여줍니다

alert(document.getElementById('PRODUCT_REVIEW_EMAILS_FIELD').value); 

- 그러나 -이 성공적으로 전달되지 않습니다 : 내가 경고를 추가 한

if (document.getElementById('PRODUCT_REVIEW_EMAILS_FIELD').checked == true){ 
      document.getElementById('PRODUCT_REVIEW_EMAILS_FIELD').value = 'on'; 
      } 
     else { 
      document.getElementById('PRODUCT_REVIEW_EMAILS_FIELD').value = 'off'; 
      } 

.

무엇이 누락 되었습니까?

+1

참고 : 양식을 제출할 때 선택하지 않은 입력란에는 값이 게시되지 않습니다. –

+0

성공적으로 전달되지 않았다고 어떻게 결정합니까? 게시 된 데이터를 검토하고 있습니까? –

+0

빠른 응답을 보내 주셔서 감사합니다. John! 좋아, 그래서 만약에 내가 on이 아닌이 필드에 null 값을 전달하고 싶다면 가능합니까? –

답변

2

이는 정상적이고 예상되며 잘 정의 된 동작입니다.

  • 체크 박스는 임의로 지정합니다. value;
  • 체크 박스의 checked 속성이 켜져 있으면 해당 값을 가진 양식의 일부로 제출됩니다.
  • 체크 박스의 checked 속성이 꺼져 있으면 전혀 제출되지 않습니다.

HTML 4.01 says :

체크 박스 (라디오 버튼)가 사용자에 의해 움직일 수있다 ON/OFF 스위치이다. 제어 요소의 checked 속성이 설정되면 스위치가 "on"됩니다. 양식이 제출되면 "켜기"확인란 컨트롤 만 성공할 수 있습니다.

And

는 다음과 같이

사용자가 (예를 들어, 제출 버튼을 활성화시킴으로써) 양식을 제출

사용자 에이전트는 그것을 처리한다.

  • 단계 : 성공적인 제어를
  • 2 단계를 식별 : 폼 데이터 구축 폼 데이터 세트가 성공적 제어로 구성 제어 이름/전류 값 쌍의 서열이다 설정.
[...]

HTML5 says similar things.


당신은 그들이없는 경우 특정 이름으로 필드를 예상하고 그에 따라 반응 에 백 엔드 코드를 작성할 수 있습니다.

1

확인란의 실제 온/오프 값을이 방법으로 처리 할 수 ​​있습니다 (확인란이 켜져 있거나 꺼져있을 때 게시됩니다). 기본적으로 이것은 PRODUCT_REVIEW_EMAILS_FIELD라는 이름의 숨겨진 양식 필드를 사용하여 값으로 채 웁니다. 숨겨진 양식 필드는 항상 게시됩니다.

<form> 
    <input id="tempCheckbox" type="checkbox" name="Temp_PRODUCT_REVIEW_EMAILS_FIELD"> 
    <input id="checkboxvalue" type="hidden" name="PRODUCT_REVIEW_EMAILS_FIELD" value="Off"> 
</form> 

<script type="text/javascript"> 
    document.getElementById("tempCheckbox").onclick = function() { 
    if (this.checked) { 
     document.getElementById("checkboxvalue").value = "On"; 
    } 
    else { 
     document.getElementById("checkboxvalue").value = "Off"; 
    } 
    } 
    // used to run on page load to verify the correct value is set incase your server side 
    // script defaults the checkbox to on 
    document.getElementById("tempCheckbox").onclick(); 
</script> 
+0

나는 "temp"라는 용어를 사용하지 않았지만, 그렇지 않은 경우는 그렇다. –

0

JavaScript에서 릴레이하지 않도록 서버 측에서 처리 할 수 ​​있습니다. 모든 확인란 앞에 참조 입력 필드를 추가해야합니다.

<form> 
    <input type="hidden" name="checkboxes" value="reference"/> 
    <input type="checkbox" name="checkboxes" value="checked"/> 
</form> 

이 매개 변수 값의 배열에 올 것 "참조-확인"순서가 선택하지 않은 경우 체크 박스가 체크하고 그냥 "참조"경우. 임의의 양의 체크 박스를 가질 수 있습니다. 이것은 논리에 영향을 미치지 않습니다.

이제 서버 쪽입니다. 이제 순서, 양의 상태에 상관 관계 논리 값의 좋은 배열을

List<Boolean> parsed = new ArrayList<Boolean>(); 
for (int i = 0; i < checkboxes.length; i++) { 
    if (i < checkboxes.length - 1 && "checked".equals(checkboxes[i + 1])) { 
     parsed.add(true); 
     i++; 
    else { 
     parsed.add(false); 
    } 
} 

: 값을 구문 분석 여기에 (자바) 논리가있어, String 배열로 '체크 박스'를 얻을 수 있다고 가정 체크 박스가 있습니다.