<input>에“readonly”속성을 추가하는 방법은 무엇입니까?


301

readonly특정에 <input>어떻게 추가 할 수 있습니까? .attr('readonly')작동하지 않습니다.


2
.attr ( 'readonly', true) works, other dont
Qiao

3
.attr ( 'readonly', 'readonly')도 작동
Qiao

3
사용하는 DOCTYPE에 따라 다릅니다. HTML 4.01 DTD의 경우 CMS의 답변은 유효하며 유효한 HTML 4.01입니다. XHTML DTD를 사용하는 경우 ceejayoz의 답변이 작동하고 유효한 XHTML입니다.
bjoernwibben

2
그것은 doctype에 의존하지 않으며 DOM은 HTML이나 XML을 통해 읽었 든 상관없이 동일합니다. 어쨌든 XHTML은 거의 항상 IE 호환성을 위해 여전히 XML이 아닌 HTML로 제공됩니다.
bobince

답변:


545

jQuery <1.9

$('#inputId').attr('readonly', true);

jQuery 1.9 이상

$('#inputId').prop('readonly', true);

prop과 attr의 차이점에 대해서 더 읽어보세요.


1
확실해? 나는 그렇게 생각했지만 사양에서 아무것도 찾을 수 없습니다. <input name = "foo"readonly = "readonly"value = "bar"/>는 xhtml 1.0을 사용하여 validator.w3.org에서 완벽하게 유효성을 검사합니다.
조나스는

17
JQuery와 API에 명시된 바와 같이이 게시물이 오히려 .attr ()보다) (.prop 변경해야합니다 : jquery.com/upgrade-guide/1.9/#attr-versus-prop-
frshca

읽기 전용 속성은 "부울 속성"입니다. whatwg.org/specs/web-apps/current-work/#boolean-attribute 다소 잘못된 이름에도 불구하고 값은 "true"또는 "false"가 아니어야합니다. 위의 코드가 실제로 작동한다고 생각하지만 (jQuery 1.8.1로 Chrome에서 테스트 됨) 나중에 경험이없는 사람들에게 혼란을 줄 수 있습니다. 또한 jQuery 문서에 따르면 값은 부울이 아닌 숫자 또는 문자열이어야합니다. api.jquery.com/attr/#attr2
Luke

151

사용 ) ($ .prop를

$("#descrip").prop("readonly",true);

$("#descrip").prop("readonly",false);

8
.prop 용 jQuery API를 읽은 후에는 이것이 정답입니다. 나는 항상 과거에 .attr ( 'readonly', 'readonly') 및 .removeAttr ( 'readonly')했지만 항상 더 정확하고 코드를 더 깨끗하게 만듭니다.
evan w

4
여기에 명시된 바와 같이 모든 사람이 대답을 사용해야합니다 jquery.com/upgrade-guide/1.9/#attr-versus-prop-
frshca

4
주의 사항 $.prop(): Prop은 readonly 속성을 공백 / 빈 문자열로 설정하므로 속성 선택기를 사용하는 CSS가있는 [readonly="readonly"]경우이를 변경해야합니다 [readonly](또는 둘 다 포함).
Luke

28

읽기 전용은 html에 정의 된 속성이므로 속성처럼 취급하십시오.

편집 할 수없는 작업을하려면 작업중인 객체에 readonly = "readonly"와 같은 것이 있어야합니다. 그리고 다시 편집 할 수있게하려면 readonly =``와 같은 것이 없습니다 (올바르게 이해하면 표준이 아닙니다). 속성을 전체적으로 제거해야합니다.

따라서 jquery를 사용하여 추가하고 제거하는 것이 합리적입니다.

읽기 전용으로 설정하십시오.

$("#someId").attr('readonly', 'readonly');

읽기 전용을 제거하십시오.

$("#someId").removeAttr('readonly');

이것이 실제로 나를 위해 일한 유일한 대안이었습니다. 그것이 도움이되기를 바랍니다!


20

.attr('readonly', 'readonly')트릭을해야합니다. 당신은 .attr('readonly')단지 그것을 하나를 설정하지 않고, 값을 반환합니다.


16
jQuery의 attr ()은 이름이 달리 암시하더라도 HTML 속성이 아닌 JavaScript 속성에서 작동합니다. attr ( 'readonly')은 실제로 부울 인 DOM 레벨 1 HTML 특성 readOnly에서 작동하므로 'true'가 더 적합합니다. 그러나 문자열 'readonly'도 자동으로 부울로 변환 될 때 정확한 값이므로 위의 작업은 여전히 ​​유효합니다.
bobince

속성을 'true'로 설정하고 싶지 않다고 생각합니다. .attr값은 JQuery와 문서에 따르면, 문자열이나 숫자가 아닌 부울이어야한다 : api.jquery.com/attr/#attr2 또한, HTML "부울 속성"은 빈 문자열 또는 속성의 값이어야합니다. 나는 해결책이 .prop()혼란을 피하기 위해 사용 하는 것이라고 생각합니다 .
Luke

16

"disabled"는 POST에서 입력이 전송되는 것을 제외한다고 생각합니다.


4
그렇습니다. 이런 이유로 "disabled"에 대한 대안을 검색하는 동안이 스레드를 찾았습니다.
조나스는

하지만 보내기 직전에 활성화하고 나중에 비활성화 할 수 있습니다 $ (document) .on ( 'submit', "#myform", function (e) {// enable inputs return true; // 그런 다음 다시 활성화하면 비활성화 }} 그것은 내가 그것을 작동 테스트
Geomorillo

숨겨진 HTML을 사용하지 않고 html의 읽기 전용 입력 값을 POST로 보낼 수 있습니까?
Ajay Takur

12

.removeAttr을 사용하여 읽기 전용을 비활성화 할 수 있습니다.

$('#descrip').removeAttr('readonly');

5

읽기 전용을 활성화하려면 :

$("#descrip").attr("readonly","true");

읽기 전용 비활성화

$("#descrip").attr("readonly","");

api.jquery.com/attr에서 "jQuery 1.6 부터 .attr () 메소드는 설정되지 않은 속성에 대해 undefined를 반환합니다. 양식 요소의 검사, 선택 또는 비활성화 상태와 같은 DOM 속성을 검색하고 변경하려면, .prop () 메소드를 사용하십시오. "
David Clarke

1
이 속성은 "true"문자열로 설정하지 않아야합니다. 이것은 작동하지만 기술적으로 정확하지는 않습니다. (위의 이전 의견 참조)
Luke Luke

이 제안을 사용하지 마십시오. 더 나은 제안이 여기 있습니다. "true"는 설정에 적합하지 않으며 제거도 올바르지 않습니다.
MiFiHiBye

4

setAttribute 속성을 사용하십시오. 예를 들어 1을 선택하면 텍스트 상자에 읽기 전용 속성을 적용하고 그렇지 않으면 읽기 전용 속성을 제거하십시오.

http://jsfiddle.net/baqxz7ym/2/

document.getElementById("box1").onchange = function(){
  if(document.getElementById("box1").value == 1) {
    document.getElementById("codigo").setAttribute("readonly", true);
  } else {
    document.getElementById("codigo").removeAttribute("readonly");
  }
};

<input type="text" name="codigo" id="codigo"/>

<select id="box1">
<option value="0" >0</option>
<option value="1" >1</option>
<option value="2" >2</option>
</select>

-4

jQuery 버전 <1.9의 경우 :

$('#inputId').attr('disabled', true);

jQuery 버전> = 1.9의 경우 :

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