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.


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/


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


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


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>


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

15

Schaltfläche zum Deaktivieren:

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

Aktivierungsschaltfläche:

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

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.


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

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>

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>

0

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

$("#buttonId").button( "option", "disabled", true | false );
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.