자바 스크립트를 사용하여 입력 요소에 비활성화 된 속성 추가


141

입력 상자가 있고 비활성화하고 동시에 양식을 이식 할 때 문제를 피하기 위해 숨길 수 있기를 원합니다.

지금까지 입력을 숨기려면 다음 코드가 있습니다.

$(".shownextrow").click(function() { 
    $(this).closest("tr").next().show().find('.longboxsmall').hide();
});

결과적으로 숨겨지는 입력입니다.

<input class="longboxsmall" type="text" />

disabled 속성을 입력에 추가하려면 어떻게해야합니까?

답변:


306

$("input").attr("disabled", true); 현재로서는 더 이상 모르겠습니다.

2013 년 12 월이며 실제로 무엇을 말해야할지 모르겠습니다.

처음에는 항상 그렇고 .attr()항상 .prop()그렇습니다. 그래서 나는 여기로 돌아와 답을 업데이트하고 더 정확하게 만들었습니다.

그런 다음 1 년 후 jQuery가 다시 마음을 바꾸었고 심지어 이것을 추적하고 싶지 않습니다.

간단히 말해서, 지금 당장은 이것이 가장 좋은 대답입니다. "둘 다 사용할 수는 있지만 다릅니다."

https://stackoverflow.com/a/5876747/257493 대신이 답변을 읽어보십시오.

해당 변경 사항에 대한 릴리스 정보는 다음과 같습니다.

값을 가져 오거나 설정하는 데 .attr () 또는 .prop ()를 사용해서는 안됩니다. 대신 .val () 메소드를 사용하십시오 (.attr ( "value", "somevalue")를 사용하면 1.6 이전과 마찬가지로 계속 작동합니다).

선호하는 사용법 요약

부울 속성 / 속성 및 html에없는 속성 (예 : window.location)에는 .prop () 메서드를 사용해야합니다. 다른 모든 속성 (html에서 볼 수있는 속성)은 .attr () 메서드를 사용하여 계속 조작 할 수 있으며 계속해야합니다.

또는 다른 말로하면 :

".prop = 비 문서 자료"

".attr"= 문서 내용

... ...

API 안정성에 대한 교훈을 모두 배우기를 바랍니다.


3
임금의 관심에 나를 위해 업데이트 텍스트 충분한을 만들기위한 한
Vael VICTUS을

@VaelVictus 그렇게 빠르지는 않습니다. 이 게시물을 게시 한 후 1 년 후에 다시 변경했다고 말해서 죄송합니다.이 답변에 대해 잊어 버렸습니다. 이 답변 읽기 : stackoverflow.com/a/5876747/257493
시크릿

1
.prop와 .attr 사이의 문서 / 비 문서 차별화는 무한히 도움이되며 이전에는 간결한 방식으로 문맥을 본 적이 없습니다. 매우 감사!
비교할 수없는

51

내 소스의 작업 코드 :

HTML 세계

<select name="select_from" disabled>...</select>

JS 월드

var from = jQuery('select[name=select_from]');

//add disabled
from.attr('disabled', 'disabled');



//remove it
from.removeAttr("disabled");

2
에서 직접 구글에서 여기 오는 사람들을위한 참고로 jQuery를 :As of jQuery 1.6, the .attr() method returns undefined for attributes that have not been set. To retrieve and change DOM properties such as the checked, selected, or disabled state of form elements, use the .prop() method
Erenor 파스

16

jQuery를 사용하는 경우 disabled 속성을 설정하는 몇 가지 방법이 있습니다.

var $element = $(...);
    $element.prop('disabled', true);
    $element.attr('disabled', true); 

    // The following do not require jQuery
    $element.get(0).disabled = true;
    $element.get(0).setAttribute('disabled', true);
    $element[0].disabled = true;
    $element[0].setAttribute('disabled', true);

무엇에 대해 $element.eq(0)[0].disabled = true;? - P
qwertynl

1
그래, 그것은 나를 위해 나아 갔고, 나는 성능을 향상시키기 위해 그렇게 가지 않습니다.
iConnor

+1. 약간 중복되지만. ElementList / array 요소를 다루려면 색인으로 요소를 선택하는 것이 어리 석습니다. 반복하거나 필요한 요소 만 선택하는 것이 더 합리적입니다.

13
$(element).prop('disabled', true); //true|disabled will work on all
$(element).attr('disabled', true); 
element.disabled = true;
element.setAttribute('disabled', true);

위의 모든 것은 완벽하게 유효한 솔루션입니다. 귀하의 요구에 가장 적합한 것을 선택하십시오.


1
jQuery가 필요없는 솔루션을 제공해 주셔서 감사합니다.
Elias Zamaria

12

DOM 요소를 가져 와서 disabled 속성을 직접 설정할 수 있습니다.

$(".shownextrow").click(function() { 
  $(this).closest("tr").next().show()
          .find('.longboxsmall').hide()[0].disabled = 'disabled';
});

또는 둘 이상이있는 경우 each()모든 것을 설정 하는 데 사용할 수 있습니다.

$(".shownextrow").click(function() { 
  $(this).closest("tr").next().show()
          .find('.longboxsmall').each(function() {
               this.style.display = 'none';
               this.disabled = 'disabled';
          });
});

5

jQuery의 attr()메소드를 사용하십시오.

$(this).closest("tr").next().show().find('.longboxsmall').attr('disabled', 'disabled');

3
.removeAttr('disabled');
ruhong

2

질문은 JS 로이 작업을 수행하는 방법을 묻는 것이기 때문에 바닐라 JS 구현을 제공하고 있습니다.

var element = document.querySelector(".your-element-class-goes-here");
// it's a good idea to check whether the element exists
if (element != null && element != undefined) {
  element.disabled = "disabled";
}

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