체크 박스 입력은 체크 된 경우에만 데이터를 게시합니까? 브라우저가 확인란 입력

양식 제출시 확인란이 선택된 경우 브라우저가 확인란 입력 값 데이터 만 보내는 것이 표준 동작입니까?

값 데이터가 제공되지 않으면 기본값은 항상 “on”입니까?

위의 내용이 맞다고 가정하면, 모든 브라우저에서 일관된 동작입니까?



답변

예, 표준 동작은 확인란이 선택된 경우에만 값이 전송됩니다. 이것은 일반적으로 모든 데이터가 양식에서 다시 나오는 것은 아니기 때문에 서버 측에서 어떤 확인란을 예상하는지 기억하는 방법이 필요하다는 것을 의미합니다.

기본값은 항상 “on”이며 이는 브라우저간에 일관성이 있어야합니다.

이것은 W3C HTML 4 권장 사항 에서 다룹니다 .

확인란 (및 라디오 버튼)은 사용자가 전환 할 수있는 켜기 / 끄기 스위치입니다. 제어 요소의 점검 속성이 설정되면 스위치가 “켜짐”입니다. 양식을 제출하면 “on”확인란 컨트롤 만 성공할 수 있습니다.


답변

HTML에서 각 <input />요소는 하나의 고유하지 않은 단일 이름 및 값 쌍과 연결됩니다. 이 쌍은 <input />“성공”인 경우에만 후속 요청 (이 경우 POST 요청 본문)으로 전송됩니다 .

따라서 <form>DOM에 이러한 입력이 있으면

<input type="text"     name="one"   value="foo"                        />
<input type="text"     name="two"   value="bar"    disabled="disabled" />
<input type="text"     name="three" value="first"                      />
<input type="text"     name="three" value="second"                     />

<input type="checkbox" name="four"  value="baz"                        />
<input type="checkbox" name="five"  value="baz"    checked="checked"   />
<input type="checkbox" name="six"   value="qux"    checked="checked" disabled="disabled" />
<input type="checkbox" name=""      value="seven"  checked="checked"   />

<input type="radio"    name="eight" value="corge"                      />
<input type="radio"    name="eight" value="grault" checked="checked"   />
<input type="radio"    name="eight" value="garply"                     />

이 이름과 값 쌍을 생성하여 서버에 제출합니다.

one=foo
three=first
three=second
five=baz
eight=grault

그것을주의해라:

  • two그리고 six그들이 있었기 때문에 제외되었다disabled 속성 세트를.
  • three 동일한 이름을 가진 두 개의 유효한 입력이 있었기 때문에 두 번 전송되었습니다.
  • four그렇지 않았기 때문에 전송 checkbox되지 않았습니다checked
  • sixchecked있기 때문에 전송되지 않았습니다disabled 속성이 더 높은 우선 순위를 가지고있다.
  • sevenname=""전송 된 속성이 없으므로 제출되지 않습니다.

귀하의 질문과 관련하여 : 선택하지 않은 확인란은 이름 + 값 쌍이 서버로 전송되지 않지만 동일한 이름을 공유하는 다른 입력이 함께 전송됨을 알 수 있습니다.

ASP.NET MVC와 같은 프레임 워크는 다음과 같이 렌더링 된 HTML의 checkbox입력과 모든 입력을 (확실히) 페어링하여이 문제를 해결합니다 hidden.

@Html.CheckBoxFor( m => m.SomeBooleanProperty )

렌더 :

<input type="checkbox" name="SomeBooleanProperty" value="true" />
<input type="hidden"   name="SomeBooleanProperty" value="false" />

사용자가 확인란을 선택하지 않으면 다음이 서버로 전송됩니다.

SomeBooleanProperty=false

사용자가 확인란을 선택하면 둘 다 전송됩니다.

SomeBooleanProperty=true
SomeBooleanProperty=false

그러나 서버는 =false버전을 확인하기 때문에 버전 을 무시 =true하므로 확인되지 않으면 입력이 전혀 렌더링되지 않는 =true것과 달리 확인란이 렌더링되고 사용자가 확인하지 않았 음을 확인할 수 SomeBooleanProperty있습니다.


답변

확인란을 선택하지 않으면 양식 제출시 전송 된 데이터에 기여하지 않습니다.

HTML5 섹션 4.10.22.4 양식 데이터 세트 구성은 양식 데이터가 구성되는 방식을 설명합니다.

다음 조건 중 하나라도 충족되면이 요소에 대해 다음 하위 단계를 건너 뛰십시오. […]

field 요소는 type 속성이 Checkbox 상태이고 checkness가 false 인 입력 요소입니다.

누락 된 on경우 기본값 이 지정됩니다 value.

그렇지 않으면, 필드 요소가 type 속성이 Checkbox 상태 또는 단일 선택 단추 상태 인 입력 요소 인 경우 다음과 같은 추가 하위 단계를 실행하십시오.

필드 요소에 value 속성이 지정되어 있으면 value를 해당 속성의 값으로 설정하십시오. 그렇지 않으면 value를 문자열 “on”으로 설정하십시오.

따라서 양식 데이터 생성 중에는 선택하지 않은 확인란을 건너 뜁니다.

HTML4 에서도 비슷한 동작이 필요합니다 . 모든 호환 브라우저에서이 동작을 예상하는 것이 합리적입니다.


답변

확인란이 선택된 경우에만 확인란이 ‘켜짐’으로 표시됩니다. 체크 박스 값을 잡기 위해 숨겨진 입력을 사용할 수 있습니다

JS :

var chk = $('input[type="checkbox"]');
    chk.each(function(){
        var v = $(this).attr('checked') == 'checked'?1:0;
        $(this).after('<input type="hidden" name="'+$(this).attr('rel')+'" value="'+v+'" />');
    });

chk.change(function(){
        var v = $(this).is(':checked')?1:0;
        $(this).next('input[type="hidden"]').val(v);
    });

HTML :

<label>Active</label><input rel="active" type="checkbox" />


답변

양식 제출시 확인란이 선택된 경우 브라우저가 확인란 입력 값 데이터 만 보내는 것이 표준 동작입니까?

예, 그렇지 않으면 확인란이 실제로 선택되었는지 여부를 결정하는 확실한 방법이 없기 때문에 (값을 변경 한 경우 원하는 값이 선택되었을 때 원하는 값과 같을 때 사례가 존재할 수 있습니다) 로 교체).

값 데이터가 제공되지 않으면 기본값은 항상 “on”입니까?

다른 답변은 “on”이 기본값임을 확인합니다. 그러나 값에 관심이 없으면 다음을 사용하십시오.

if (isset($_POST['the_checkbox'])){
    // name="the_checkbox" is checked
}


답변

거의 모든 브라우저에서 일관되어야하는 HTML 4 사양에서 :

http://www.w3.org/TR/html401/interact/forms.html#checkbox

확인란 (및 라디오 버튼)은 사용자가 전환 할 수있는 켜기 / 끄기 스위치입니다. 제어 요소의 점검 속성이 설정되면 스위치가 “켜짐”입니다. 양식을 제출하면 “on”확인란 컨트롤 만 성공할 수 있습니다.

성공은 다음과 같이 정의됩니다.

성공적인 제어는 제출에 “유효”합니다. 모든 성공적인 제어는 제출 된 양식 데이터 세트의 일부로 제어 이름과 현재 값이 쌍을 이룹니다. 성공적인 제어는 FORM 요소 내에 정의되어야하며 제어 이름이 있어야합니다.


답변

입력 유형 = “숨김”name = “is_main”value = “0”

입력 유형 = “확인란”name = “is_main”value = “1”

응용 프로그램에서와 같이 이와 같이 제어 할 수 있습니다. 확인하면 값 1을 보내십시오. 그렇지 않으면 0