Wat is de makkelijkste manier om uit te schakelen / inschakelen van knoppen en links (jQuery + Bootstrap)
Soms gebruik ik ankers gestileerd als knoppen en soms gebruik ik gewoon knoppen. Ik wil specifieke klik-dingen uitschakelen, zodat:
- Ze er uitgeschakeld uitzien
- Er niet meer op geklikt wordt
Hoe kan ik dit doen?
354
3
Buttons
Knoppen zijn eenvoudig uit te schakelen omdat
disabled
een eigenschap van de knop is die door de browser wordt afgehandeld:Om deze uit te schakelen met een aangepaste jQuery functie, zou je'doodeenvoudig gebruik maken van
fn.extend()
:[JSFiddle uitgeschakeld knop en input demo][2].
Anders'zou je gebruik maken van jQuery's
prop()
methode:Anchor Tags
Het is de moeite waard om op te merken dat
disabled
geen geldige eigenschap is voor anker tags. Om deze reden gebruikt Bootstrap de volgende styling op zijn.btn
elementen:Merk op hoe de
[disabled]
eigenschap is gericht, evenals een.disabled
klasse. De.disabled
class is wat nodig is om een anchor tag uitgeschakeld te laten lijken.Natuurlijk zal dit niet verhinderen dat links werken wanneer erop geklikt wordt. De bovenstaande link brengt ons naar http://example.com. Om dit te voorkomen, kunnen we een eenvoudig stukje jQuery code toevoegen om anker tags met de
disabled
class aan te roepenevent.preventDefault()
:We kunnen de
disabled
class aanzetten doortoggleClass()
te gebruiken:[JSFiddle uitgeschakelde link demo][8].
Gecombineerd
We kunnen dan de vorige disable functie van hierboven uitbreiden om het type element te controleren dat we proberen uit te schakelen met
is()
. Op deze manier kunnen wetoggleClass()
als het geeninput
ofbutton
element is, of dedisabled
eigenschap aanzetten als het dat wel is:[Volledig gecombineerde JSFiddle demo][10].
Het'is de moeite waard om verder op te merken dat de bovenstaande functie ook zal werken op alle input types.
Ik kan me geen eenvoudiger/gemakkelijker manier indenken! ;-)
Het gebruik van Anchor tags (Links) :
Om de Anchor tag in te schakelen:
Om de Anchor tag uit te schakelen:
@James Donnelly heeft een uitgebreid antwoord gegeven dat berust op het uitbreiden van jQuery met een nieuwe functie. Dat is een geweldig idee, dus ik ga zijn code aanpassen zodat het werkt zoals ik het nodig heb.
*Uitbreiding van jQuery**
Gebruik
De code zal een enkel element of een lijst van elementen verwerken.
Knoppen en ingangen ondersteunen de
disabled
eigenschap en, indien ingesteld optrue
, zullen ze er uitgeschakeld uitzien (met dank aan bootstrap) en zullen ze niet afgaan wanneer erop geklikt wordt.Ankers ondersteunen de
disabled
eigenschap niet, dus in plaats daarvan gaan we vertrouwen op de.disabled
klasse om ze er uitgeschakeld uit te laten zien (weer dankzij bootstrap) en een standaard klik event op te zetten dat de klik voorkomt door false terug te sturen (geen noodzaak voorpreventDefault
zie hier).Noot: Je hoeft dit event niet los te haken bij het opnieuw inschakelen van ankers. Simpelweg de
.disabled
class verwijderen is voldoende.Dit helpt natuurlijk niet als je een custom click handler aan de link hebt gekoppeld, iets wat vaak voorkomt bij gebruik van bootstrap en jQuery. Dus om dit op te lossen gaan we de
isDisabled()
extensie gebruiken om te testen op de.disabled
class, zoals dit:Ik hoop dat dit de zaken een beetje helpt vereenvoudigen.