HTML 양식 입력 필드에서 disabled =“disabled”와 readonly =“readonly”의 차이점은 무엇입니까?


435

나는 이것에 대해 조금 읽었지만 다른 브라우저가 어떻게 처리하는지에 대한 확실한 것을 찾을 수없는 것 같습니다.


관련 : "선택 태그에 대한 읽기 전용 속성을 에뮬레이트하고 POST 데이터를 얻는 방법" stackoverflow.com/questions/368813/…
Adrien

답변:


729

readonly요소는 편집 할 수 없습니다,하지만 따라 할 때 보내지 form을 제출합니다. disabled요소는 편집 할 수 없습니다 제출에 전송되지 않습니다. 또 다른 차이점은 readonly요소는 초점을 맞출 수없고 (양식을 통해 "탭"할 때 초점을 맞출 수 있음) disabled요소는 할 수 없다는 것입니다.

이 위대한 기사 또는 w3c에 의한 정의 에서 이것 에 대해 더 읽으십시오 . 중요한 부분을 인용하려면 :

주요 차이점

Disabled 속성

  • 비활성화 된 양식 요소의 값은 프로세서 메소드로 전달되지 않습니다. W3C는 이것을 성공적인 요소라고 부릅니다 (이것은 선택되지 않은 양식 확인란과 유사하게 작동합니다).
  • 일부 브라우저는 비활성화 된 양식 요소에 대한 기본 스타일을 대체하거나 제공 할 수 있습니다. (Gray out 또는 emboss text) Internet Explorer 5.5는 특히 이것에 대해 불쾌합니다.
  • 비활성화 된 양식 요소에는 포커스가 없습니다.
  • 탭 탐색에서 비활성화 된 양식 요소를 건너 뜁니다.

읽기 전용 속성

  • 모든 양식 요소에 읽기 전용 속성이있는 것은 아닙니다. 가장 주목할만한의 <SELECT>, <OPTION><BUTTON>요소는 읽기 전용 속성이없는 (둘 다 사용할 속성이 있지만)
  • 브라우저는 양식 요소가 읽기 전용이라는 기본 재정의 시각적 피드백을 제공하지 않습니다. (이것은 문제가 될 수 있습니다… 아래를 참조하십시오.)
  • 읽기 전용 속성이 설정된 양식 요소는 양식 프로세서로 전달됩니다.
  • 읽기 전용 양식 요소는 포커스를받을 수 있습니다
  • 읽기 전용 양식 요소는 탭 탐색에 포함됩니다.

5
읽기 전용 요소에서는 CTRL + C를 사용할 수 없지만 마우스 오른쪽 버튼을 클릭하고 복사를 선택할 수 있습니다.
Rumplin

7
@Rumplin 확실합니까? 방금 테스트 한 결과 OS X의 Chrome에서 단축키를 사용하여 복사 할 수있었습니다.
evanrmurphy

5
"모든 양식 요소에 읽기 전용 속성이있는 것은 아닙니다. 가장 주목할만한 <SELECT>, <OPTION> 및 <BUTTON> 요소에는 읽기 전용 속성이 없습니다 (둘 다 속성이 비활성화되어 있음). 따라서 선택 양식에 대해 숨겨진 입력 필드와 함께 "비활성화"속성을 사용해야하는 이유가 있습니다.
Donato

현재 Chrome 버전에서는 읽기 전용 요소가 포커스를받을 수 없습니다. 사용자가 입력 크기보다 긴 값을 스크롤 할 수있을 것으로 예상되는 경우 문제가됩니다.
Mike Feltman

5
disabled 암시암시readonly 하지만 readonly암시하지는 않습니다 disabled. 즉, 요소에 disabled속성 이있는 경우 속성도 포함 할 필요가 없습니다 readonly. 옳은?
chharvey

91

요소가 속성을 비활성화 한 경우 이벤트가 트리거되지 않습니다.

아래 중 어느 것도 트리거되지 않습니다.

$("[disabled]").click( function(){ console.log("clicked") });//No Impact
$("[disabled]").hover( function(){ console.log("hovered") });//No Impact
$("[disabled]").dblclick( function(){ console.log("double clicked") });//No Impact

읽기 전용이 트리거되는 동안

$("[readonly]").click( function(){ console.log("clicked") });//log - clicked
$("[readonly]").hover( function(){ console.log("hovered") });//log - hovered
$("[readonly]").dblclick( function(){ console.log("double clicked") });//log - double clicked

35

Disabled는 양식을 제출할 때 해당 양식 요소의 데이터가 제출되지 않음을 의미합니다. 읽기 전용은 요소 내의 모든 데이터가 제출되지만 사용자가 변경할 수 없음을 의미합니다.

예를 들면 다음과 같습니다.

<input type="text" name="yourname" value="Bob" readonly="readonly" />

"yourname"요소에 "Bob"값을 제출합니다.

<input type="text" name="yourname" value="Bob" disabled="disabled" />

"yourname"요소에 대해서는 아무것도 제출하지 않습니다.


6
모두 readonlydisabled부울 값입니다. disabled대신 사용 disabled="disabled"(읽기 전용과 동일)
랩터

5
둘 다 의미 론적으로 정확합니다. HTML5를 사용하면 둘 중 하나를 사용할 수 있습니다.
Michael Irigoyen

3
값없이 속성 이름 만 사용하는 컨텍스트없는 권고는 권장되지 않습니다. 코드가 유효한 XML / XHTML이 아니기 때문입니다. 나는 많은 개발자들이 그것들에 신경 쓰지 않는다는 것을 알고 있지만 적어도 함정을 알고 있어야합니다. 개인적으로 저는 아직받지 못한 강력한 이유가 없다면 XHTML 준수를 위해 노력하고 있습니다. 그래서 길고 중복 된 형식을 사용합니다.
underscore_d

1
@ToolmakerSteve 빈 문자열이 유효한 XHTML이라는 인용이 있습니까? HTML5에 유효하다는 의견 페이지 만 찾을 수 있습니다. XHTML에 대해 이야기 한 모든 사람들은 부울 속성의 형식이이어야한다고 말합니다 attrname="attrname". 어느 쪽이든, 적어도 내가 찾을 수없는 것은 문서화가 잘되어 있지 않은 것 같습니다. w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2-XHTML 이 아닌 SGML 및 HTML 만 언급합니다. 너무 많은 약어 : S
underscore_d

1
...하지만 존재 유무가 충분한 HTML의 비트를 건너 뜁니다.이를 얻을 수 있습니다. 이는 아마도 XHTML을 생략하면 적용됩니다. Boolean attributes may legally take a single value: the name of the attribute itself (e.g., selected="selected").따라서 빈 문자열은 유효하지 않은 것 같습니다.
underscore_d

4

다른 답변과 동일하지만 (사용 안 함은 서버로 전송되지 않고 읽기 전용입니다) 일부 브라우저는 비활성화 된 양식을 강조 표시하지 못하게하지만 읽기 전용은 여전히 ​​강조 표시 및 복사 할 수 있습니다.

http://www.w3schools.com/tags/att_input_disabled.asp

http://www.w3schools.com/tags/att_input_readonly.asp

읽기 전용 필드는 수정할 수 없습니다. 그러나 사용자는 탭하여 강조 표시 한 다음 텍스트를 복사 할 수 있습니다.


1

disabled = "disabled"읽기 전용 텍스트 상자는 값을 유지하지 않으므로 양식을 지울 때 (재설정) 비활성화 된 텍스트 상자의 값을 유지해야하는 경우 사용해야합니다.

예를 들어 :

HTML

텍스트 박스

<input type="text" id="disabledText" name="randombox" value="demo" disabled="disabled" />

리셋 버튼

<button type="reset" id="clearButton">Clear</button>

위의 예에서 지우기 버튼을 누르면 비활성화 된 텍스트 값이 양식에 유지됩니다. 다음의 경우 가치가 유지되지 않습니다input type = "text" readonly="readonly"

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