Відключити кнопку jQuery


359

Моя сторінка створює кілька кнопок як id = 'rbutton_"+i+"'. Нижче мій код:

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

У Javascript

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

Але вона не відключає мою кнопку, коли натискаю на неї.


6
'rbutton _ "+ i +"' не є дійсним ідентифікатором.
Діод - Джеймс Макфарлайн

Як я можу вказати ідентифікатор. Він створюється в моєму javascript всередині циклу for.
користувач2047817

Як щодо створення jsFiddle, щоб ми могли бачити, що ви робите?
j08691

5
Ви, мабуть, хочете disable(this)іfunction disable(elem) { $(elem).attr("disabled","disabled") }
JJJ

2
jQuery може звертатися до елементів, використовуючи їх індексний номер, тому якщо ви зробите це правильно, вам можуть навіть не потрібні ідентифікатори. Ви можете передати відключення (це) як самонавідку.
Діод - Джеймс Макфарлан

Відповіді:


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
користувач2047817

ДОБРЕ. Він працював у програмі No Wrap - в Head..Але я можу запитати, чому? Можливо, це щось подібне, я не роблю цього в своєму фактичному коді !!
користувач2047817

Мабуть, так, як він встановив jsFiddle - ви можете "перевірити елемент" у своєму браузері, якщо хочете проаналізувати, що саме відбувається.
Blazemonger

1
Це добре працює. Просто переконайтесь, що якщо ви використовуєте ajax, ви ввімкнете кнопку у випадках успіху та помилки. Не до кінця дзвінка ajax. Тому що тоді це буде негайно ввімкнено, і ви взагалі не побачите відключення.
user890332

З jQuery 1.10.2 він працює в IE 11, але не у версії Chrome 39.0.2171.95 m. Підозріло, що загадка, використана для цієї відповіді, не пропонує jQuery 1.10.2
Алекс

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

DEMO


Інше рішення з чистим JavaScript

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

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

DEMO2


Друга .click () функція відмінно працює у вашій демонстрації. Але я повинен використовувати окремий метод, як згадувалося у вашому першому рішенні, але він не працює. Чи можете ви допомогти !!
користувач2047817

Додано третє рішення з чистим JavaScript @ user2047817
Alessandro Minoccheri

29

Тут є дві речі, і найвища відповідь, що голосує, є технічно правильною відповідно до питання ОП.

Коротко підсумовані як:

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

Однак якщо ви користуєтесь інтерфейсом jQuery (я знаю, що OP не було, але деякі люди, що приїхали сюди, можливо), тоді, коли це відключить натискання кнопок події, воно не буде робити кнопку вимкненою відповідно до стилю інтерфейсу.

Якщо ви використовуєте кнопку стилю інтерфейсу jQuery, її слід увімкнути / відключити за допомогою:

$("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
Дуже приємно, сер. Це повністю спрацьовує навіть із кнопками завантаження.
steve moretz


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-продовження'). Prop ("вимкнено", правда)

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

2. $ ('# psl2 .btn-продовження'). Attr ("вимкнено", "відключено")

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.