Schaltfläche in jQuery deaktivieren

Ankit Raj Goyal 15 Februar 2024
  1. Deaktivieren Sie die Schaltfläche in jQuery, indem Sie das event-Objekt an den onclick-Event-Handler übergeben
  2. Deaktivieren Sie den Button in jQuery mit der this-Referenz im onclick-Event-Handler
  3. Deaktivieren Sie die Schaltfläche in jQuery Verwenden Sie die Methode bind(), um this den richtigen Wert zuzuweisen
  4. Deaktivieren Sie die Schaltfläche in jQuery Verwenden Sie die Methode call(), um this den richtigen Wert zuzuweisen
  5. Deaktivieren Sie die Schaltfläche in jQuery mit Element-ID und nutzen Sie die Vorteile der flexiblen dynamischen Typisierung von JavaScript
  6. Deaktivieren Sie die Schaltfläche in jQuery mit der DOM-Eigenschaft disabled mithilfe der jQuery-Methode .prop()
Schaltfläche in jQuery deaktivieren

In diesem Tutorial verwenden wir den Event-Handler onclick mit verschiedenen Argumenten wie dem event-Objekt, der this-Referenz und der element id, um die Schaltfläche in jQuery zu deaktivieren. Außerdem finden Sie hier Tipps zur dynamischen Typisierung in Funktionsargumenten, zu event.target versus event.currentTarget und zu den jQuery-Methoden .prop() versus .attr().

Deaktivieren Sie die Schaltfläche in jQuery, indem Sie das event-Objekt an den onclick-Event-Handler übergeben

Der Event-Handler onclick wird ausgelöst, wenn wir auf das Zielelement klicken. Standardmäßig nimmt der Callback zu onclick nur ein Argument entgegen, das event-Objekt.

Lassen Sie uns dieses Standardargument als unsere erste Methode verwenden, um die Schaltfläche in jQuery zu deaktivieren.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Default event argument</title>
    <script type="text/javascript" src="jQuery.js"></script>
    <script type="text/javascript">
        function disable(e){
            $(e.currentTarget).attr("disabled","disabled");

            //updating the text to disabled
            $(e.currentTarget).html("I am disabled");
        }
    </script>
    <link rel="stylesheet" href="disable_button_jQuery.css">
</head>
<body>
    <div id="main">
        <button id="disable_me" onclick="disable(event)">Click to disable me</button>
    </div>
</body>
</html>

Wir haben ein button-Element, an das wir einen onclick-Event-Handler anhängen. Der Callback dazu übernimmt das standardmäßige Objektargument event.

Wir deaktivieren die Schaltfläche mit der Tastencodezeile:

$(e.currentTarget).attr("disabled","disabled")

Die Eigenschaft currentTarget des event-Objekts identifiziert das Element, an das der Event-Handler angehängt ist, in unserem Fall das button-Element.

Abschließend setzen wir das disabled HTML-Attribut dieses button-Elements mit der jQuery .attr()-Methode auf disabled.

Wir aktualisieren auch den button-Text, um seinen deaktivierten Zustand in der nächsten Codezeile mit der jQuery-Methode .html() anzuzeigen.

Hier ist die funktionierende Demo dieser Lösung.

jquery-Deaktivierungsschaltfläche durch Übergeben des Ereignisobjekts

Profi-Tipp:

Die Eigenschaft event target ähnelt der Eigenschaft currentTarget, bezieht sich aber auf das Element, auf dem das Ereignis ausgelöst wird. Dies könnte anders sein, wenn das DOM-Element in Fällen von Ereignisblasen weitergegeben wird.

Daher ist es in diesem Fall besser, die Eigenschaft currentTarget zu verwenden.

Deaktivieren Sie den Button in jQuery mit der this-Referenz im onclick-Event-Handler

das Problem mit der standardmäßigen this-Referenz im onclick-Event-Handler

Das Schlüsselwort this innerhalb des Ereignishandlers onclick bezieht sich auf das Element, auf dem es ausgelöst wird. Wir wissen jedoch, dass das JavaScript-Schlüsselwort this seinen Kontext zur Laufzeit dynamisch annimmt.

Daher bezieht es sich in diesem Fall standardmäßig nicht auf das auslösende Element.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Default this Keyword</title>
    <script type="text/javascript" src="jQuery.js"></script>
    <link rel="stylesheet" href="disable_button_jQuery.css"/>
    <script type="text/javascript">
        function disable(){
            console.log("The value of this by default is : " +  this);
            $(this).attr("disabled","disabled");
        }
    </script>
</head>
<body>
    <div id="main">
        <button id="disable_me" onclick="disable()">Click to disable me</button>
    </div>
</body>
</html>

Wir verwenden die this-Referenz innerhalb der onclick-Callback-Funktion disable. Zum besseren Verständnis protokollieren wir auch den Wert des this-Objekts.

Schauen wir uns die Ausgabe dieses Codes unten an:

Standardverhalten dieser Referenz

Hier sind zwei Dinge passiert:

  1. Erstens hat unser Code die Schaltfläche nicht wie gewünscht deaktiviert.
  2. Zweitens, wenn wir uns den Wert von this in der Konsole ansehen, bezieht er sich auf das window-Objekt. Dies ist das erwartete Verhalten.

Wenn wir den disable-Callback außerhalb einer Funktion im Inline-Event-Handler ausführen, verweist JavaScript sein this-Schlüsselwort dynamisch auf das globale window-Objekt.

Es gibt mehrere Möglichkeiten, dieses Problem zu beheben.

Deaktivieren Sie die Schaltfläche in jQuery Verwenden Sie die Methode bind(), um this den richtigen Wert zuzuweisen

Wir können die Referenz des Schlüsselworts this im disable-Callback des onclick-Handlers mit der bind()-Methode setzen.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Bind method</title>
    <script type="text/javascript" src="jQuery.js"></script>
    <link rel="stylesheet" href="disable_button_jQuery.css"/>
    <script type="text/javascript">
        function disable(e){
            console.log("The value of 'this' by explicity specifying it with bind method is : " +  this);
            $(this).attr("disabled","disabled");

            //updating the text to disabled
            $(this).html("I am disabled");
        }
    </script>
</head>
<body>
    <div id="main">
        <button id="disable_me" onclick="disable.bind(this)()">Click to disable me</button>
    </div>
</body>
</html>

Den richtigen Kontext setzen wir mit der Zeile onclick = "disable.bind(this)()". Da sich das Schlüsselwort this des onclick lexikalisch auf das button-Element bezieht, übergeben wir this an die bind()-Methode, um diesen Wert als permanenten Wert festzulegen.

Danach ändert sich der Wert von this zur Laufzeit nicht.

Der Rest des Codes ähnelt unseren obigen Lösungen. Schauen wir uns die folgende Ausgabe an:

Stellen Sie den korrekten Wert mit der Bind-Methode ein

Unser Code deaktiviert nun die Schaltfläche wie gewünscht. Auch der Wert von this in der Konsolenausgabe verweist nun auf ein HTMLButtonElement.

Gotcha, auf das Sie achten müssen

Vergessen Sie nicht das Klammerpaar nach der Methode .bind(), etwa so:

onclick = "disable.bind(this)()"

.bind() verpackt die zugrunde liegende Funktion in eine neue Funktion mit dem neuen this-Wert und gibt diese Funktion zurück. Stellen Sie also sicher, dass Sie diese Wrapper-Funktion mit dem abschließenden Klammerpaar () aufrufen.

Deaktivieren Sie die Schaltfläche in jQuery Verwenden Sie die Methode call(), um this den richtigen Wert zuzuweisen

Wir können this auch den richtigen Wert zuweisen, wenn wir es mit der Methode call() aufrufen. Beachten Sie, dass call() this nur einen bestimmten Kontext für den konkreten Funktionsaufruf zuweist, während .bind() den Wert von this dauerhaft festlegt.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Call method</title>
    <script type="text/javascript" src="jQuery.js"></script>
    <link rel="stylesheet" href="disable_button_jQuery.css"/>
    <script type="text/javascript">
        function disable(e){
            console.log("The value of 'this' by specicifying it during execution with call method is : " +  this);
            $(this).attr("disabled","disabled");

            //updating the text to disabled
            $(this).html("I am disabled");
        }
    </script>
</head>
<body>
    <div id="main">
        <button id="disable_me" onclick="disable.call(this)">Click to disable me</button>
    </div>
</body>
</html>

Den richtigen Wert von this weisen wir während der Ausführung mit dem Code-Snippet zu:

onclick = "disable.call(this)"

Wir haben die Logik des restlichen Codes bereits früher aufgeschlüsselt.

Hier ist die Ausgabe dieses Programms.

Setzen Sie den korrekten Wert mit der call-Methode

Gotcha, auf das Sie achten müssen

Hier gibt es kein abschließendes Klammerpaar () nach der Methode .call(). Die Methode .call() gibt keine neue Funktion zurück, wie dies bei der Methode .bind() der Fall ist.

Es setzt nur den neuen this-Kontext im selben Funktionsaufruf, sodass wir ihn nicht noch einmal mit den Klammern am Ende aufrufen müssen.

Deaktivieren Sie die Schaltfläche in jQuery mit Element-ID und nutzen Sie die Vorteile der flexiblen dynamischen Typisierung von JavaScript

Eines der schönen Dinge an JavaScript ist seine Flexibilität. Sie können es mit fast demselben Code dazu bringen, alles zu tun, was Sie wollen.

Dasselbe gilt für JavaScript-Funktionen. Jede Funktion in JavaScript kann so viele Argumente annehmen, wie wir übergeben möchten.

Wir müssen nicht dieselben Argumentdatentypen wie in der Funktionsdefinition übergeben, da JS eine dynamisch typisierte Sprache ist.

Lassen Sie uns diese Funktion von JavaScript ausnutzen, um die Schaltfläche in jQuery mit der Element-ID zu deaktivieren, indem wir fast den gleichen Code verwenden, wie wir ihn oben geschrieben haben.

Wir haben erwähnt, dass der Callback zum onclick nur ein Argument akzeptiert, das event-Objekt, gemäß seiner Funktionsdefinition. Aber wir werden ihm das Element-Argument id übergeben, und JavaScript wird sich nicht beschweren!

Hier ist der magische Code:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Using Dynamic Typing</title>
    <script type="text/javascript" src="jQuery.js"></script>
    <link rel="stylesheet" href="disable_button_jQuery.css"/>
    <script type="text/javascript">
        function disable(id){     // replace id with e when you want to display the default event object type
            $("#"+id).attr("disabled","disabled");
            console.log("The type of argument \nwhen we pass the \n'id' type object as argument is : \n"
                        + typeof arguments[0]);

            // console.log("The type of argument \nwhen we pass the \ndefault 'event' object as argument is : \n"
            // + typeof arguments[0]);

             //update the text to disabled
            $("#"+id).html("I am disabled");
        }
    </script>
</head>
<body>
    <div id="main">
        <button id="disable_me" onclick="disable('disable_me')">Click to disable me</button>
    </div>
</body>
</html>

Wir übergeben die id an den Callback an den Eventhandler onclick ="disable('disable_me')"

JavaScript lässt uns dieses Argument verwenden, ohne uns darüber zu beschweren, dass sein Typ anders ist als der fest codierte Argumenttyp event in der Funktionsdefinition.

Anschließend setzen wir damit das HTML-Attribut disabled des button-Elements auf den Wert disabled, etwa so:

$("#" + id).attr("deaktiviert","deaktiviert");

Schauen wir uns die Ausgabe an:

Schaltfläche mit Element-ID deaktivieren

Wir sehen, dass unser Code korrekt funktioniert. Außerdem ist in der Konsolenausgabe auf der rechten Seite der Argumenttyp eine Zeichenfolge, die unser Element id ist, das an den Callback übergeben wird.

Vergleichen wir auch den Argumenttyp, wenn wir das Standardargument vom Typ Ereignis übergeben.

    <script type="text/javascript">
        function disable(event){     // replace id with e when you want to display the default 										//event object type
             //$("#"+id).attr("disabled","disabled");
            // console.log("The type of argument \nwhen we pass the \n'id' type object as 								//argument is : \n"
                        // + typeof arguments[0]);

            console.log("The type of argument \nwhen we pass the \ndefault 'event' object as 						argument is : \n"
                        + typeof arguments[0]);

             //update the text to disabled
           // $("#"+id).html("I am disabled");
        }
    </script>
</head>
<body>
    <div id="main">
        <button id="disable_me" onclick="disable(event)">Click to disable me</button>
    </div>

Hier ist die Ausgabe:

Das standardmäßige Ereignisobjektargument für den Rückruf

Hier sehen wir, dass der Typ des Arguments in der Konsole object ist, da event ein Objekt in JavaScript ist.

Deaktivieren Sie die Schaltfläche in jQuery mit der DOM-Eigenschaft disabled mithilfe der jQuery-Methode .prop()

Schließlich können wir auch die DOM-Eigenschaft disabled in all unseren oben genannten Lösungen verwenden. Diese Eigenschaft entspricht dem HTML-Attribut disabled, und wir können darauf mit der jQuery-Methode .prop() zugreifen.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Using prop method</title>
    <script type="text/javascript" src="jQuery.js"></script>
    <script type="text/javascript">
        function disable(e){
            $(e.currentTarget).prop("disabled",true);

            //updating the text to disabled
            $(e.currentTarget).html("I am disabled");
        }
    </script>
    <link rel="stylesheet" href="disable_button_jQuery.css">
</head>
<body>
    <div id="main">
        <button id="disable_me" onclick="disable(event)">Click to disable me</button>
    </div>
</body>
</html>

Der Code ist fast derselbe wie der, den wir für die Methode mit dem Standardargument event oben verwendet haben. Wir verwenden nur die DOM-Eigenschaft disabled wie folgt:

$(e.currentTarget).prop("disabled",true);

Hier ist die funktionierende Demo:

Schaltfläche in jQuery mit DOM-Eigenschaft deaktivieren

Gotcha, auf das Sie achten müssen

Beachten Sie, dass die DOM-Eigenschaft disabled einen booleschen Wert annimmt, im Gegensatz zum HTML-Attribut disabled, das den Wert disabled annimmt. Stellen Sie also sicher, dass Sie in der Methode .prop() für diese Methode den Wert true übergeben.