jQuery로 입력을 비활성화 / 활성화 하시겠습니까?


답변:


3810

jQuery 1.6 이상

disabled속성 을 변경하려면 .prop()함수를 사용해야합니다 .

$("input").prop('disabled', true);
$("input").prop('disabled', false);

jQuery 1.5 이하

.prop()함수는 존재 .attr()하지 않지만 비슷합니다.

disabled 속성을 설정하십시오.

$("input").attr('disabled','disabled');

다시 활성화하려면 올바른 방법을 사용하는 것입니다 .removeAttr()

$("input").removeAttr('disabled');

모든 버전의 jQuery

항상 실제 DOM 객체에 의존 할 수 있으며 하나의 요소 만 처리하는 경우 다른 두 옵션보다 약간 빠릅니다.

// assuming an event handler thus 'this'
this.disabled = true;

.prop()또는 .attr()메소드 를 사용하면 선택된 여러 항목에 대해 속성을 설정할 수 있다는 장점이 있습니다.


참고 : 1.6 에는와.removeProp() 비슷한 방법이 removeAttr()있지만 설명서의 Excerpt 와 같은 기본 속성에는 사용하지 않아야'disabled' 합니다.

참고 :이 방법을 사용하여 확인, 비활성화 또는 선택과 같은 기본 속성을 제거하지 마십시오. 이렇게하면 속성이 완전히 제거되고 일단 제거되면 요소에 다시 추가 할 수 없습니다. 대신 .prop ()를 사용하여 이러한 속성을 false로 설정하십시오.

사실, 나는이 방법에 대해 많은 합법적 인 사용이 의심된다. ​​부울 소품은 1.5의 "속성"과 같이 "제거"하는 대신 거짓으로 설정해야한다.


9
제쳐두고, 모든 양식 입력 컨트롤을 비활성화하려면 다음을 포함하십시오. 확인란, 라디오, 텍스트 영역 등을 선택해야합니다 . ':input'뿐만 아니라을 (를) 선택해야합니다 'input'. 후자는 실제 <input> 요소 만 선택합니다.
코넬 마손

35
@CornelMasson은 input,textarea,select,button보다 사용하기 위해 조금 더 :input- :input이 선택해야하기 때문에 선택은 매우 비효율적으로 *다음 태그 이름하여 각 요소 및 필터를 통해 루프 - 당신이 4 태그 이름 선택기를 전달하면 직접이 훨씬 빠릅니다. 또한 :input표준 CSS 선택 도구가 아니기 때문에 가능한 모든 성능 향상 querySelectorAll이 손실됩니다
gnarf

3
이렇게하면 사용자가 액세스하지 못하거나 실제로 웹 요청에서 사용자를 제거합니까?
OneChillDude

4
를 사용하면 .removeProp("disabled")Chrome과 같은 일부 브라우저의 경우 @ThomasDavidBaker가 지적한 것처럼 "속성이 완전히 제거되고 다시 추가되지 않습니다"라는 문제가 발생했지만 Firefox와 같은 일부 브라우저에서는 제대로 작동했습니다. 우리는 여기서 조심해야합니다. 항상 .prop("disabled",false)대신 사용
Sandeepan Nath

6
앵커 요소를 비활성화하는 데 .prop 또는 .attr만으로는 충분하지 않습니다. .prop는 'control'을 회색으로 표시하지 않습니다 (.attr이 수행하지만 href는 여전히 활성 상태입니다). preventDefault ()를 호출하는 click 이벤트 핸들러도 추가해야합니다.
Jeff Lowery

61

ECMA6 (????)로 상황이 크게 바뀌지 않는 한 새로운 컨벤션을 위해 & 앞으로 계속 적응할 수 있도록 만들기 위해 :

$(document).on('event_name', '#your_id', function() {
    $(this).removeAttr('disabled');
});

$(document).off('event_name', '#your_id', function() {
    $(this).attr('disabled','disabled');   
});

12
지크 스! 왜 $(document).on('event_name', '#your_id', function() {...})대신에 $('#your_id').on('event_name', function() {...}). jQuery .on () 문서 에서 설명한 것처럼 전자는 위임을 사용 하고 버블 링 되는 모든 event_name 이벤트를 수신 document하고 일치 하는지 확인합니다 #your_id. 후자는 구체적으로 $('#your_id')만 이벤트를 듣고 확장 성이 더 좋습니다.
피터 V. Mørch

23
전자는 어느 시점에서든 DOM에 삽입 된 요소에 대해 작동하며, 후자는 해당 시점에 존재하는 요소에 대해서만 작동합니다.
crazymykl

1
@crazymykl 맞지만 페이지에 이미 ID가있는 요소를 추가해서는 안됩니다.
SepehrM

33
    // Disable #x
    $( "#x" ).prop( "disabled", true );
    // Enable #x
    $( "#x" ).prop( "disabled", false );

입력 또는 텍스트 영역과 같은 양식 요소를 비활성화 / 활성화해야하는 경우가 있습니다. Jquery를 사용하면 disabled 속성을 "disabled"로 설정하여 쉽게 만들 수 있습니다. 예를 들어 :

  //To disable 
  $('.someElement').attr('disabled', 'disabled');

비활성화 된 요소를 활성화하려면이 요소에서 "disabled"특성을 제거하거나 문자열을 비워야합니다. 예를 들어 :

//To enable 
$('.someElement').removeAttr('disabled');

// OR you can set attr to "" 
$('.someElement').attr('disabled', '');

참조 : http://garmoncheg.blogspot.fr/2011/07/how-to-disableenable-element-with.html


13
$("input")[0].disabled = true;

또는

$("input")[0].disabled = false;

2
물론 질문은 jQuery를 요청했으며 이것이 일반 JavaScript에서 상태를 변경하고 있지만 작동합니다.
basic6

1
JavaScript에서 상태가 변경되지만 jQuery 선택기를 사용하여 첫 번째 입력을 가져옵니다.
cjsimon

3
하지만 난 대답이 작동하는 경우에 우리가 여기 JQuery와의 백과 사전을 만들고있다 생각하지 않는다, 그것의 좋은
사자 드 Shirazy

8

코드의 전역 어딘가에 넣을 수 있습니다.

$.prototype.enable = function () {
    $.each(this, function (index, el) {
        $(el).removeAttr('disabled');
    });
}

$.prototype.disable = function () {
    $.each(this, function (index, el) {
        $(el).attr('disabled', 'disabled');
    });
}

그리고 다음과 같이 쓸 수 있습니다.

$(".myInputs").enable();
$("#otherInput").disable();

3
기능을 포장하는 것은 편리하지만, 당신은 사용해야 prop하고 하지 attr 으로 disabled는 (위 jQuery를 1.6 가정) 제대로 작동하는 속성입니다.
코딩 사라지다

1
@TrueBlueAussie 사용의 단점은 무엇입니까 attr? 나는 일부 프로젝트에서 위 코드를 사용하고 그것이 잘 작동하는 것을 기억하는 한
Nicu Surdu

1
명백한 예외는 배후에 속성이있는 컨트롤입니다. 가장 유명한 것은 checked확인란 의 속성입니다. 사용 attr하면 같은 결과가 나오지 않습니다.
코딩 사라지다

7

토글 버튼 동작과 같은 현재 상태를 반전하려는 경우 :

$("input").prop('disabled', ! $("input").prop('disabled') );

1
고마워 나는 토글에 대해 같은 것을 가지고있다. $ ( "input"). prop ( 'disabled', function (i, v) {return! v;});
Floww

5

요소를 사용하거나 사용하지 않도록 설정할 수있는 방법에는 여러 가지가 있습니다 .

접근법 1

$("#txtName").attr("disabled", true);

접근법 2

$("#txtName").attr("disabled", "disabled");

jQuery 1.7 이상 버전을 사용하는 경우 attr () 대신 prop ()를 사용하십시오.

$("#txtName").prop("disabled", "disabled");

요소를 활성화하려면 비활성화하기 위해 수행 한 작업과 반대로해야합니다. 그러나 jQuery는 속성을 제거하는 다른 방법을 제공합니다.

접근법 1

$("#txtName").attr("disabled", false);

접근법 2

$("#txtName").attr("disabled", "");

접근법 3

$("#txtName").removeAttr("disabled");

jQuery 1.7 이상을 사용하는 경우 attr () 대신 prop ()를 사용하십시오. 그렇습니다. 이것은 jQuery를 사용하여 요소를 활성화하거나 비활성화하는 방법입니다.


2

2018 년 업데이트 :

이제이 jQuery를 필요가 없습니다 그리고 그것은을하고있는 동안 이후 document.querySelector 또는 document.querySelectorAll거의 정확히 같은 일을 할 (여러 요소) $ 플러스 더 명시 것과 같은 getElementById, getElementsByClassName,getElementsByTagName

"입력 확인란"클래스의 한 필드 비활성화

document.querySelector('.input-checkbox').disabled = true;

또는 여러 요소

document.querySelectorAll('.input-checkbox').forEach(el => el.disabled = true);

1
질문은 특히 jQuery에 대해 묻습니다 ...하지만 똑같이 귀하의 진술은 정확하며 더 이상 여러 요소가있을 때 jQuery 를 사용할 필요 가 없다는 것을 알 가치가 있습니다.
ADyson

2

jQuery prop () 메소드를 사용하여 jQuery를 사용하여 양식 요소를 제어하거나 동적으로 제어 할 수 있습니다. prop () 메소드에는 jQuery 1.6 이상이 필요합니다.

예:

<script type="text/javascript">
        $(document).ready(function(){
            $('form input[type="submit"]').prop("disabled", true);
            $(".agree").click(function(){
                if($(this).prop("checked") == true){
                    $('form input[type="submit"]').prop("disabled", false);
                }
                else if($(this).prop("checked") == false){
                    $('form input[type="submit"]').prop("disabled", true);
                }
            });
        });
    </script>

1

비활성화 :

$('input').attr('readonly', true); // Disable it.
$('input').addClass('text-muted'); // Gray it out with bootstrap.

사용 :

$('input').attr('readonly', false); // Enable it.
$('input').removeClass('text-muted'); // Back to normal color with bootstrap.

1

입력 유형에 대해 true를 비활성화하십시오.

특정 입력 유형의 경우 ( 예 : 텍스트 유형 입력 )

$("input[type=text]").attr('disabled', true);

모든 유형의 입력 유형

$("input").attr('disabled', true);

1
덕분에 입력 이름을 분리하는 데 도움이되었습니다. $("input[name=method]").prop('disabled', true);
Harry Bosh

1

이것은 나를 위해 작동

$("#values:input").attr("disabled",true);
$("#values:input").attr("disabled",false);

0

@ gnarf 답변을 사용하고 함수로 추가했습니다.

   $.fn.disabled = function (isDisabled) {
     if (isDisabled) {
       this.attr('disabled', 'disabled');
     } else {
       this.removeAttr('disabled');
     }
   };

그런 다음 이렇게 사용하십시오

$('#myElement').disable(true);

0

JQuery가없는 2018 (ES6)

모두 비활성화 input:

[...document.querySelectorAll('input')].map(e => e.disabled = true);

inputid="my-input"

document.getElementById('my-input').disabled = true;

문제는 JQuery 와 관련있으며 단지 FYI입니다.




-1
<html>
<body>

Name: <input type="text" id="myText">



<button onclick="disable()">Disable Text field</button>
<button onclick="enable()">Enable Text field</button>

<script>
function disable() {
    document.getElementById("myText").disabled = true;
}
function enable() {
    document.getElementById("myText").disabled = false;
}
</script>

</body>
</html>

1
검토 대기열에서 : 답변 주위에 컨텍스트를 추가하도록 요청하십시오. 코드 전용 답변은 이해하기 어렵습니다. 게시물에 더 많은 정보를 추가 할 수 있다면 asker와 향후 독자 모두에게 도움이 될 것입니다.
RBT

-1

jQuery Mobile에서 :

비활성화

$('#someselectElement').selectmenu().selectmenu('disable').selectmenu('refresh', true);
$('#someTextElement').textinput().textinput('disable');

활성화

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