display : none에 의해 숨겨진 입력 필드를 서버로 보내는 것을 피하는 방법은 무엇입니까?


88

여러 필드의 가시성을 전환하는 양식이 있다고 가정하십시오. 필드가 표시되지 않는 경우 해당 값이 요청되는 것을 원하지 않습니다.

이 상황을 어떻게 처리합니까?

답변:


128

양식 요소를 비활성화로 설정하면 서버로의 이동이 중지됩니다. 예 :

<input disabled="disabled" type="text" name="test"/>

자바 스크립트에서는 다음과 같은 의미입니다.

var inputs = document.getElementsByTagName('input');
for(var i = 0;i < inputs.length; i++) {
    if(inputs[i].style.display == 'none') {
        inputs[i].disabled = true;
    }
}
document.forms[0].submit();

jQuery에서 :

   $('form > input:hidden').attr("disabled",true);
   $('form').submit();

16
jQuery의 의사 선택으로 :input대신 input하면 쉽게 모든 비활성화 할 수 있습니다 selecttextarea요소
다니엘 Rikowski

8
jQuery> = 1.6에서 대신 api.jquery.com/propattr("disabled", true) 를 사용해야합니다prop("disabled", true)
yorch

2
@ dominicbri7-jQuery 1.6부터는 사용 안함 및 확인 된 속성을 모두 가져오고 설정하는 데 .prop()대신 사용 하는 .attr()것이 좋습니다. 을 사용하여 확인하거나 설정하면 .attr()경우에 따라 원하지 않는 결과가 반환됩니다. yorch가 언급 한 내용에 대해 언급하기 전에 jQuery 문서를 읽으십시오.
zgr024

zgr024 미세 @, 내 댓글 삭제
dominicbri7

2
@DanielRikowski, 여기 jQuery와 함께 무엇입니까 jQuery 거기 말도 안돼. Vanilla JS에 대해 이야기합시다.
Pacerier

13

javascript를 사용하여 disabled 속성을 설정할 수 있습니다. '제출'버튼 클릭 이벤트가이 작업을 수행하는 가장 좋은 장소 일 것입니다.

그러나 나는 이것을 전혀하지 않는 것이 좋다. 가능하면 서버에서 쿼리를 필터링해야합니다. 이것은 더 신뢰할 수 있습니다.


7

숨겨진 상위 요소 내의 모든 요소 또는 특정 요소를 비활성화하려면 다음을 사용할 수 있습니다.

$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled");

이 예는 http://jsfiddle.net/gKsTS/ 숨겨진 div 내의 모든 텍스트 상자를 비활성화합니다.


이것은 숨겨진 div를 반복하고 모두 비활성화하므로 매우 좋은 솔루션입니다. 더 많은 +1을 받아야합니다
yeppe

6

는 어때:

$('#divID').children(":input").prop("disabled", true); // disable

$('#divID').children(":input").prop("disabled", false); // enable

숨겨진 div 내에서 모든 하위 입력 (선택, 체크 박스, 입력, 텍스트 영역 등)을 토글합니다.


모든 입력을 확보하려는 경우 이것은 훌륭한 솔루션입니다. 좋은 일
doz87

3

매우 간단한 (항상 가장 편리한 것은 아님) 솔루션 중 하나는 "이름"속성을 제거하는 것입니다. 표준에서는 브라우저가 이름이 지정되지 않은 값을 보내지 않아야하며 내가 아는 모든 브라우저가이 규칙을 준수해야합니다.


4
자바 스크립트를 통해 상태를 변경하면 모든 이름 속성을 캐싱하지 않고는 입력을 재설정 할 수 없기 때문에 권장되지 않습니다. 비활성화 상태를 전환하는 것이 더 쉽습니다.
Simon

1

입력에서 값을 제거하거나 DOM에서 입력 개체를 분리하여 처음에 게시되지 않도록합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.