Was ist der einfachste Weg, um Schaltflächen und Links zu deaktivieren/aktivieren (jQuery + Bootstrap)
Manchmal verwende ich Anker, die als Schaltflächen gestaltet sind, und manchmal verwende ich nur Schaltflächen. Ich möchte bestimmte Klick-Dinge deaktivieren, damit:
- sie deaktiviert aussehen
- sie nicht mehr angeklickt werden
Wie kann ich das tun?
354
3
Schaltflächen
Schaltflächen sind einfach zu deaktivieren, da
disabled
eine Schaltflächeneigenschaft ist, die vom Browser gehandhabt wird:Um diese mit einer benutzerdefinierten jQuery-Funktion zu deaktivieren, verwenden Sie einfach
fn.extend()
:[JSFiddle deaktiviert Schaltfläche und Eingabe Demo][2].
Andernfalls würden Sie jQuery's
prop()
Methode verwenden:Anker-Tags
Es ist erwähnenswert, dass
disabled
keine gültige Eigenschaft für Anker-Tags ist. Aus diesem Grund verwendet Bootstrap das folgende Styling für seine.btn
Elemente:Beachten Sie, dass die Eigenschaft
[disabled]' und die Klasse
.disabled' verwendet werden. Die Klasse "disabled" wird benötigt, um einen Anker-Tag deaktiviert erscheinen zu lassen.Natürlich wird dies nicht verhindern, dass Links funktionieren, wenn sie angeklickt werden. Der obige Link wird uns zu http://example.com führen. Um dies zu verhindern, können wir ein einfaches Stück jQuery-Code hinzufügen, um Anker-Tags mit der Klasse
disabled
aufzurufenevent.preventDefault()
:Wir können die Klasse
disabled
umschalten, indem wirtoggleClass()
verwenden:[JSFiddle deaktiviert Link Demo][8].
Kombiniert
Wir können dann die oben beschriebene Funktion zum Deaktivieren erweitern, um den Typ des Elements zu prüfen, das wir mit
is()
deaktivieren wollen. Auf diese Weise können wirtoggleClass()
verwenden, wenn es sich nicht um eininput
- oderbutton
-Element handelt, oder die Eigenschaftdisabled
umschalten, wenn dies der Fall ist:[Vollständige kombinierte JSFiddle-Demo][10].
Es ist erwähnenswert, dass die obige Funktion auch mit allen Eingabetypen funktioniert.
Ich kann mir nichts Einfacheres vorstellen ;-)
Verwendung von Anchor-Tags (Links) :
Um das Anchor-Tag zu aktivieren:
So deaktivieren Sie den Anchor-Tag:
@James Donnelly hat eine umfassende Antwort geliefert, die sich auf die Erweiterung von jQuery mit einer neuen Funktion stützt. Das ist eine großartige Idee, also werde ich seinen Code anpassen, damit er so funktioniert, wie ich es brauche.
Erweiterung von jQuery
Verwendung
Der Code verarbeitet ein einzelnes Element oder eine Liste von Elementen.
Schaltflächen und Eingaben unterstützen die Eigenschaft
disabled
. Wenn sie auftrue
gesetzt sind, sehen sie deaktiviert aus (dank Bootstrap) und werden beim Anklicken nicht ausgelöst.Anker unterstützen die Eigenschaft
disabled
nicht, so dass wir uns stattdessen auf die Klasse.disabled
verlassen, um sie deaktiviert aussehen zu lassen (wieder dank Bootstrap) und ein Standard-Klick-Ereignis einzurichten, das den Klick verhindert, indem es false zurückgibt (keine Notwendigkeit fürpreventDefault
siehe hier).Anmerkung: Sie müssen dieses Ereignis nicht aushängen, wenn Sie die Anker wieder aktivieren. Das einfache Entfernen der Klasse
.disabled
genügt.Natürlich hilft dies nicht, wenn Sie einen benutzerdefinierten Click-Handler an den Link angehängt haben, etwas, das bei der Verwendung von Bootstrap und jQuery sehr häufig ist. Um damit umzugehen, verwenden wir die Erweiterung "isDisabled()", um auf die Klasse "disabled" zu testen, etwa so:
Ich hoffe, das hilft, die Dinge ein wenig zu vereinfachen.