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);

안 input와id="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.