Disabilita il pulsante in jQuery


359

La mia pagina crea più pulsanti come id = 'rbutton_"+i+"'. Di seguito è il mio codice:

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

In Javascript

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

Ma non disabilita il mio pulsante quando faccio clic su di esso.


6
'rbutton _ "+ i +"' non è un ID valido.
Diodeus - James MacFarlane,

Come posso specificare l'id. Viene creato nel mio javascript all'interno di un ciclo for.
user2047817

Che ne dici di creare un jsFiddle in modo che possiamo vedere cosa stai facendo?
j08691,

5
Probabilmente vuoi disable(this)efunction disable(elem) { $(elem).attr("disabled","disabled") }
JJJ il

2
jQuery può indirizzare gli elementi usando il loro numero indice, quindi se lo fai nel modo giusto, potresti non aver nemmeno bisogno di ID. È possibile passare disabilita (questo) come riferimento automatico.
Diodeus - James MacFarlane,

Risposte:


638

Utilizzare .propinvece (e ripulire la stringa del selettore):

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

HTML generato:

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

Ma l'approccio "best practice" consiste nell'utilizzare l'associazione di eventi JavaScript e thisinvece:

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


Ecco un piccolo violino che ho creato. Per favore, fammi sapere cosa sto facendo di sbagliato. jsfiddle.net/2Nfu4/3
user2047817

OK. Ha funzionato in No Wrap - in Head..Ma posso chiedere perché? Potrebbe essere qualcosa di simile, non lo sto facendo nel mio codice reale !!
user2047817

Sembra proprio come jsFiddle ha installato, sembra che puoi "ispezionare l'elemento" nel tuo browser se vuoi analizzare esattamente cosa sta succedendo.
Blazemonger,

1
Funziona bene Assicurati solo che se stai usando Ajax, abiliti il ​​pulsante nei casi di successo ed errore. Non entro la fine della chiamata Ajax. Perché allora sarà immediatamente abilitato e non vedrai affatto la disabilitazione.
user890332

Con jQuery 1.10.2 funziona in IE 11, ma non in Chrome versione 39.0.2171.95 m. Sospettosamente, il violino usato per questa risposta non offre jQuery 1.10.2
Alex,

35

Prova questo codice:
HTML

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

funzione

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

Altra soluzione con jquery

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

DEMO


Altra soluzione con javascript puro

<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


La seconda funzione .click () funziona perfettamente nella tua demo. Ma devo usare il metodo separato come menzionato nella tua prima soluzione ma non funziona. Potete per favore aiutare !!
user2047817

Aggiunta una terza soluzione con javascript puro @ user2047817
Alessandro Minoccheri,

29

Ci sono due cose qui e la risposta più votata è tecnicamente corretta secondo la domanda dei PO.

Riassumendo brevemente come:

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

Tuttavia, dovresti usare l'interfaccia utente di jQuery (so che l'OP non lo era, ma alcune persone che arrivano qui potrebbero esserlo), mentre questo disabiliterà l'evento di clic sui pulsanti, ma non farà apparire il pulsante disabilitato secondo lo stile dell'interfaccia utente.

Se si utilizza un pulsante in stile UI jQuery, è necessario abilitarlo / disabilitarlo tramite:

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

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


27

Questo è il modo più semplice secondo me:

// 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
Molto carino, signore. Funzionava perfettamente, anche con bottoni bootstrap.
Steve Moretz,

25

Prova questo

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

15

pulsante disabilita:

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

pulsante abilita:

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

13

Semplicemente funziona bene, in HTML:

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

Nel lato JQuery metti questa funzione per il pulsante disabilita:

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

Per il pulsante di abilitazione:

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

È tutto.


3

Ecco come lo fai con 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

in alcune versioni di jQuery, è necessario utilizzare .attr('disabled', true). Non so quale, ma la versione che devo usare (minimizzata e in bundle come parte dell'app su cui sto lavorando) object does not support prop
vomita

2

Questo funziona per me:

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

2

Voglio disabilitare il pulsante in alcune condizioni, sto usando la prima soluzione ma non funzionerà per me. Ma quando ne uso la seconda ha funzionato. Di seguito sono emessi dalla console del browser.

1. $ ('# psl2 .btn-continue'). Prop ("disabilitato", vero)

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

2. $ ('# psl2 .btn-continue'). Attr ("disabilitato", "disabilitato")

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

0

Per i pulsanti dell'interfaccia utente di Jquery funziona:

$("#buttonId").button( "option", "disabled", true | false );
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.