Désactiver le bouton dans jQuery

359

Ma page crée plusieurs boutons comme id = 'rbutton_"+i+"'. Voici mon code:

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

En Javascript

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

Mais cela ne désactive pas mon bouton lorsque je clique dessus.

user2047817
la source
6
'rbutton _ "+ i +"' n'est pas un ID valide.
Diodeus - James MacFarlane
Comment puis-je spécifier l'identifiant. Il est créé dans mon javascript dans une boucle for.
user2047817
Que diriez-vous de créer un jsFiddle afin que nous puissions voir ce que vous faites?
j08691
5
Vous voulez probablement disable(this)etfunction disable(elem) { $(elem).attr("disabled","disabled") }
JJJ
2
jQuery peut adresser des éléments en utilisant leur numéro d'index, donc si vous le faites correctement, vous n'aurez peut-être même pas besoin d'identifiants. Vous pouvez passer désactiver (ceci) comme une auto-référence.
Diodeus - James MacFarlane

Réponses:

638

Utilisez à la .propplace (et nettoyez votre chaîne de sélection):

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

HTML généré:

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

Mais l'approche des "meilleures pratiques" consiste à utiliser la liaison d'événements JavaScript et à la thisplace:

$('.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/

Blazemonger
la source
Voici un petit violon que j'ai créé. S'il vous plaît laissez-moi ce que je fais mal. jsfiddle.net/2Nfu4/3
user2047817
D'ACCORD. Cela a fonctionné dans No Wrap - dans Head..Mais puis-je demander pourquoi? Peut-être que c'est quelque chose de similaire, je ne fais pas ça dans mon code actuel !!
user2047817
Il semble que jsFiddle ait configuré cela - vous pouvez "inspecter l'élément" dans votre navigateur si vous voulez analyser exactement ce qui se passe.
Blazemonger
1
Cela fonctionne bien. Assurez-vous simplement que si vous utilisez ajax, vous activez le bouton dans les cas de réussite et d'erreur. Pas à la fin de l'appel ajax. Parce qu'alors, il sera immédiatement activé et vous ne verrez pas du tout le désactiver.
user890332
Avec jQuery 1.10.2, il fonctionne dans IE 11, mais pas dans la version Chrome 39.0.2171.95 m. Curieusement, le violon utilisé pour cette réponse n'offre pas jQuery 1.10.2
Alex
35

Essayez ce code:
HTML

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

une fonction

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

Autre solution avec jquery

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

DEMO


Autre solution avec javascript pur

<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

Alessandro Minoccheri
la source
La deuxième fonction .click () fonctionne parfaitement dans votre démo. Mais je dois utiliser la méthode distincte mentionnée dans votre première solution mais cela ne fonctionne pas. Peux-tu aider s'il te plait!!
user2047817
Ajout d'une troisième solution avec javascript pur @ user2047817
Alessandro Minoccheri
29

Il y a deux choses ici, et la réponse la plus votée est techniquement correcte selon la question des PO.

Brièvement résumé comme suit:

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

Cependant, si vous utilisez jQuery UI (je sais que l'OP ne l'était pas, mais certaines personnes arrivant ici pourraient l'être), alors que cela désactivera l'événement de clic sur les boutons, il ne fera pas apparaître le bouton désactivé selon le style de l'interface utilisateur.

Si vous utilisez un bouton de style jQuery UI, il doit être activé / désactivé via:

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

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

Morvael
la source
27

C'est le moyen le plus simple à mon avis:

// 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>

Lucas
la source
1
Très gentil monsieur, cela a totalement fonctionné, même avec des boutons bootstrap.
steve moretz
25

Essaye ça

function disable(i){
    $("#rbutton_"+i).attr("disabled",true);
}
Mary Ann
la source
15

bouton de désactivation:

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

bouton d'activation:

$('#button_id').removeAttr('disabled');
Cris
la source
13

Simplement, ça marche bien, en HTML:

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

Dans le côté JQuery, mettez cette fonction pour le bouton de désactivation:

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

Pour le bouton d'activation:

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

C'est tout.

George Pradeep
la source
3

Voici comment vous le faites avec 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
user890332
la source
dans certaines versions de jQuery, vous devez utiliser .attr('disabled', true). Je ne sais pas laquelle, mais la version que je dois utiliser (minifiée et intégrée à l'application sur laquelle je travaille) apparaîtobject does not support prop
JoeBrockhaus
2

Cela fonctionne pour moi:

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

Je veux désactiver le bouton à certaines conditions, j'utilise la 1ère solution mais cela ne fonctionnera pas pour moi. Mais lorsque j'utilise le 2ème, cela a fonctionné. Ci-dessous, les sorties de la console du navigateur.

1. $ ('# psl2 .btn-continue'). Prop ("désactivé", vrai)

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

2. $ ('# psl2 .btn-continue'). Attr ("désactivé", "désactivé")

<a class=​"btn btn-yellow btn-continue" href=​"#" disabled=​"disabled">​Next​</a>
Pooja Mane
la source
0

Pour les boutons Jquery UI, cela fonctionne:

$("#buttonId").button( "option", "disabled", true | false );
Khrys aka Louis
la source