jQuery에서 비활성화 버튼


359

내 페이지는로 여러 개의 버튼을 만듭니다 id = 'rbutton_"+i+"'. 아래는 내 코드입니다.

<button type='button' id = 'rbutton_"+i+"' onclick=disable(i);>Click me</button>

자바 스크립트에서

function disable(i){
    $("#rbutton'+i+'").attr("disabled","disabled");
}

그러나 버튼을 클릭해도 버튼이 비활성화되지 않습니다.


6
'rbutton _ "+ i +"'는 유효한 ID가 아닙니다.
Diodeus-James MacFarlane

ID를 어떻게 지정할 수 있습니까? for 루프 내 자바 스크립트에서 생성됩니다.
user2047817

jsFiddle을 만들어 어떻습니까?
j08691

5
당신은 아마 원하는 disable(this)function disable(elem) { $(elem).attr("disabled","disabled") }
JJJ

2
jQuery는 색인 번호를 사용하여 요소를 처리 할 수 ​​있으므로 올바르게 수행하면 ID가 필요하지 않을 수도 있습니다. 자체 참조로 disable (this)을 전달할 수 있습니다.
Diodeus-James MacFarlane

답변:


638

.prop대신 사용 하고 선택기 문자열을 정리하십시오.

function disable(i){
    $("#rbutton_"+i).prop("disabled",true);
}

생성 된 HTML :

<button id="rbutton_1" onclick="disable(1)">Click me</button>
<!-- wrap your onclick in quotes -->

그러나 "모범 사례"접근 방식은 JavaScript 이벤트 바인딩을 this대신 사용하는 것입니다.

$('.rbutton').on('click',function() {
    $(this).prop("disabled",true);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<button class="rbutton">Click me</button>

http://jsfiddle.net/mblase75/2Nfu4/


여기 내가 만든 작은 바이올린이 있습니다. 내가 뭘 잘못하고 있는지 알려주세요. jsfiddle.net/2Nfu4/3
user2047817

확인. No Wrap-in Head에서 일했는데 왜 그런지 물어봐도 될까요? 이것이 비슷한 것일 수도 있습니다. 실제 코드에서는이 작업을 수행하지 않습니다!
user2047817

jsFiddle의 설정 방식 그대로, 정확히 무슨 일이 일어나고 있는지 분석하려면 브라우저에서 "요소 검사"를 수행 할 수 있습니다.
Blazemonger

1
이것은 잘 작동합니다. 아약스를 사용하는 경우 성공 및 오류 상황에서 버튼을 활성화해야합니다. 아약스 호출이 끝날 때까지는 아닙니다. 그러면 즉시 활성화되고 비활성화가 전혀 표시되지 않습니다.
user890332

jQuery 1.10.2에서는 IE 11에서는 작동하지만 Chrome 버전 39.0.2171.95에서는 작동하지 않습니다. 의심의 여지없이,이 답변에 사용 된 바이올린은 jQuery 1.10.2를 제공하지 않습니다
Alex

35

이 코드를 사용해보십시오 :
HTML

<button type='button' id = 'rbutton_'+i onclick="disable(i)">Click me</button>

함수

function disable(i){
    $("#rbutton_"+i).attr("disabled","disabled");
}

jquery를 사용하는 다른 솔루션

$('button').click(function(){ 
    $(this).attr("disabled","disabled");
});

데모


순수한 자바 스크립트가있는 다른 솔루션

<button type='button' id = 'rbutton_1' onclick="disable(1)">Click me</button>

<script>
function disable(i){
 document.getElementById("rbutton_"+i).setAttribute("disabled","disabled");
}
</script>

데모 2


두 번째 .click () 함수는 데모에서 완벽하게 작동합니다. 그러나 첫 번째 솔루션에서 언급 한 별도의 방법을 사용해야했지만 작동하지 않습니다. 도와주세요!
user2047817

순수 자바 스크립트와 세 번째 솔루션 user2047817 @ 추가
알레산드로 Minoccheri

29

여기에는 두 가지가 있으며 OP 질문에 따라 가장 높은 투표 응답이 기술적으로 정확합니다.

간단히 요약하면 다음과 같습니다.

$("some sort of selector").prop("disabled", true | false);

그러나 jQuery UI를 사용해야하는 경우 (OP는 아니지만 여기에 도착하는 사람들이있을 수 있음을 알고 있음) 버튼 클릭 이벤트를 비활성화하면 UI 스타일에 따라 버튼이 비활성화 된 것처럼 보이지 않습니다.

jQuery UI 스타일 버튼을 사용하는 경우 다음을 통해 활성화 / 비활성화해야합니다.

$("some sort of selector").button("enable" | "disable");

http://api.jqueryui.com/button/#method-disable


27

이것은 내 의견으로는 가장 간단한 방법입니다.

// All buttons where id contains 'rbutton_'
const $buttons = $("button[id*='rbutton_']");

//Selected button onclick
$buttons.click(function() {
    $(this).prop('disabled', true); //disable clicked button
});

//Enable button onclick
$('#enable').click(() =>
    $buttons.prop('disabled', false) //enable all buttons
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="rbutton_200">click</button>
<button id="rbutton_201">click</button>
<button id="rbutton_202">click</button>
<button id="rbutton_203">click</button>
<button id="rbutton_204">click</button>
<button id="rbutton_205">click</button>
<button id="enable">enable</button>


1
부트 스트랩 버튼으로도 완벽하게 작동했습니다.
스티브 모 레츠

25

이 시도

function disable(i){
    $("#rbutton_"+i).attr("disabled",true);
}

15

비활성화 버튼 :

$('#button_id').attr('disabled','disabled');

활성화 버튼 :

$('#button_id').removeAttr('disabled');

13

HTML에서 간단하게 작동합니다.

<button type="button" id="btn_CommitAll"class="btn_CommitAll">save</button>

JQuery 측에서 비활성화 버튼 에이 기능을 넣으십시오.

function disableButton() {
    $('.btn_CommitAll').prop("disabled", true);
}

활성화 버튼의 경우 :

function enableButton() {
    $('.btn_CommitAll').prop("disabled", false);
}

그게 다야.


3

다음은 ajax로 수행하는 방법입니다.

$("#updatebtn").click(function () {
    $("#updatebtn").prop("disabled", true);
    urlToHandler = 'update.ashx';
            jsonData = data;
            $.ajax({
                url: urlToHandler,
                data: jsonData,
                dataType: 'json',
                type: 'POST',
                contentType: 'application/json',
                success: function (data) {
                    $("#lbl").html(data.response);
                    $("#updatebtn").prop("disabled", false);
                    //setAutocompleteData(data.response);
                },
                error: function (data, status, jqXHR) {
                    alert('There was an error.');
                    $("#updatebtn").prop("disabled", false);
                }
            }); // end $.ajax

일부 버전의 jQuery에서는을 사용해야합니다 .attr('disabled', true). 어떤 버전인지 모르겠지만 사용중인 버전 (작업중인 앱의 일부로 축소 및 번들로 제공됨)과 함께object does not support prop
JoeBrockhaus

2

이것은 나를 위해 작동합니다 :

<script type="text/javascript">
function change(){
    document.getElementById("submit").disabled = false;
}
</script>

2

어떤 조건에서 버튼을 비활성화하고 싶습니다. 첫 번째 솔루션을 사용하고 있지만 작동하지 않습니다. 그러나 두 번째 것을 사용할 때 작동했습니다. 아래는 브라우저 콘솔의 출력입니다.

1. $ ( '# psl2 .btn-continue'). prop ( "disabled", true)

<a class=​"btn btn-yellow btn-continue" href=​"#">​Next​</a>

2. $ ( '# psl2 .btn-continue'). attr ( "disabled", "disabled")

<a class=​"btn btn-yellow btn-continue" href=​"#" disabled=​"disabled">​Next​</a>

0

Jquery UI 버튼의 경우 다음과 같이 작동합니다.

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