Deaktivieren Sie die Schaltfläche in jQuery

359

Meine Seite erstellt mehrere Schaltflächen als id = 'rbutton_"+i+"'. Unten ist mein Code:

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

In Javascript

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

Meine Schaltfläche wird jedoch nicht deaktiviert, wenn ich darauf klicke.

user2047817
quelle
6
'rbutton _ "+ i +"' ist keine gültige ID.
Diodeus - James MacFarlane
Wie kann ich die ID angeben? Es wird in meinem Javascript in einer for-Schleife erstellt.
user2047817
Wie wäre es mit einer jsFiddle, damit wir sehen können, was Sie tun?
j08691
5
Sie wollen wahrscheinlich disable(this)undfunction disable(elem) { $(elem).attr("disabled","disabled") }
JJJ
2
jQuery kann Elemente mithilfe ihrer Indexnummer adressieren. Wenn Sie es also richtig machen, benötigen Sie möglicherweise nicht einmal IDs. Sie können disable (this) als Selbstreferenz übergeben.
Diodeus - James MacFarlane

Antworten:

638

Verwenden Sie .propstattdessen (und bereinigen Sie Ihre Auswahlzeichenfolge):

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

generiertes HTML:

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

Der "Best Practices" -Ansatz besteht jedoch darin, die JavaScript-Ereignisbindung zu verwenden und thisstattdessen:

$('.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
quelle
Hier ist eine kleine Geige, die ich erstellt habe. Bitte lassen Sie mich, was ich falsch mache. jsfiddle.net/2Nfu4/3
user2047817
OK. Es hat in No Wrap - in Head funktioniert. Aber darf ich fragen warum? Vielleicht ist das etwas ähnliches, ich mache das nicht in meinem eigentlichen Code !!
user2047817
So wie es jsFiddle eingerichtet hat, können Sie anscheinend das Element in Ihrem Browser "überprüfen", wenn Sie genau analysieren möchten, was gerade passiert.
Blazemonger
1
Das funktioniert gut. Stellen Sie einfach sicher, dass Sie bei Verwendung von Ajax die Schaltfläche in den Erfolgs- und Fehlerfällen aktivieren. Nicht bis zum Ende des Ajax-Aufrufs. Denn dann wird es sofort aktiviert und Sie werden die Deaktivierung überhaupt nicht sehen.
user890332
Mit jQuery 1.10.2 funktioniert es in IE 11, jedoch nicht in Chrome Version 39.0.2171.95 m. Verdächtigerweise bietet die für diese Antwort verwendete Geige nicht jQuery 1.10.2
Alex
35

Versuchen Sie diesen Code:
HTML

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

Funktion

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

Andere Lösung mit jquery

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

DEMO


Andere Lösung mit reinem 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

Alessandro Minoccheri
quelle
Die zweite Funktion .click () funktioniert perfekt in Ihrer Demo. Aber ich muss die separate Methode verwenden, wie in Ihrer ersten Lösung erwähnt, aber sie funktioniert nicht. Können Sie bitte helfen!!
user2047817
Eine dritte Lösung mit reinem Javascript @ user2047817
Alessandro Minoccheri
29

Hier gibt es zwei Dinge, und die Antwort mit der höchsten Stimme ist gemäß der Frage des OP technisch korrekt.

Kurz zusammengefasst als:

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

Wenn Sie jedoch die jQuery-Benutzeroberfläche verwenden (ich weiß, dass das OP nicht vorhanden war, aber möglicherweise einige Leute hier ankommen), wird die Schaltfläche zwar deaktiviert, aber die Schaltfläche wird gemäß dem UI-Stil nicht deaktiviert angezeigt.

Wenn Sie eine Schaltfläche im Stil einer jQuery-Benutzeroberfläche verwenden, sollte diese aktiviert / deaktiviert werden über:

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

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

Morvael
quelle
27

Dies ist meiner Meinung nach der einfachste Weg:

// 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
quelle
1
Sehr netter Herr. Das hat total funktioniert. Auch mit Bootstrap-Knöpfen.
Steve Moretz
25

Versuche dies

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

Schaltfläche zum Deaktivieren:

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

Aktivierungsschaltfläche:

$('#button_id').removeAttr('disabled');
Krise
quelle
13

In HTML funktioniert es einfach einwandfrei:

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

Setzen Sie auf der JQuery-Seite diese Funktion für die Schaltfläche zum Deaktivieren:

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

Für die Schaltfläche zum Aktivieren:

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

Das ist alles.

George Pradeep
quelle
3

So geht's mit 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
quelle
In einigen Versionen von jQuery müssen Sie verwenden .attr('disabled', true). Ich weiß nicht welche, aber die Version, die ich verwenden muss (minimiert und gebündelt als Teil der App, an der ich arbeite), wirft sich mitobject does not support prop
JoeBrockhaus
2

Das funktioniert bei mir:

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

Ich möchte die Schaltfläche unter bestimmten Bedingungen deaktivieren. Ich verwende die erste Lösung, aber sie funktioniert bei mir nicht. Aber wenn ich 2. benutze, hat es funktioniert. Unten sind Ausgaben von der Browserkonsole.

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>
Pooja Mähne
quelle
0

Für Jquery UI-Schaltflächen funktioniert dies:

$("#buttonId").button( "option", "disabled", true | false );
Khrys alias Louis
quelle