Détails
Quel est le moyen le plus simple d'activer/désactiver des boutons et des liens (jQuery + Bootstrap) ?
Parfois, j'utilise des ancres stylisées comme des boutons et parfois j'utilise simplement des boutons. Je veux désactiver des éléments cliquables spécifiques afin que :
- Ils aient l'air désactivés
- Ils ne soient plus cliqués
Comment faire ?
354
3
Boutons
Les boutons sont simples à désactiver car
disabled
est une propriété du bouton qui est gérée par le navigateur :Pour les désactiver avec une fonction jQuery personnalisée, il suffit d'utiliser [
fn.extend()
][1] :[Démo du bouton et de l'entrée désactivés de JSFiddle][2].
Sinon, vous devez utiliser la méthode [
prop()
][3] de jQuery :Balises d'ancrage
Il convient de noter que
disabled
n'est pas une [propriété valide][4] pour les balises d'ancrage. Pour cette raison, Bootstrap utilise le style suivant sur ses éléments.btn
:Notez comment la propriété
[disabled]
est ciblée ainsi qu'une classe.disabled
. La classe.disabled
est nécessaire pour faire apparaître une balise d'ancrage désactivée.Bien entendu, cela n'empêchera pas les liens de fonctionner lorsqu'on clique dessus. Le lien ci-dessus nous mènera à http://example.com. Pour éviter cela, nous pouvons ajouter un simple morceau de code jQuery pour cibler les balises d'ancrage avec la classe
disabled
et appeler [event.preventDefault()
][5] :Nous pouvons faire basculer la classe
disabled
en utilisant [toggleClass()
][6] :[Démonstration du lien désactivé par JSFiddle][8].
Combiné
Nous pouvons ensuite étendre la fonction disable précédente pour vérifier le type d'élément que nous essayons de désactiver en utilisant [
is()
][9]. De cette façon, nous pouvonstoggleClass()
si ce n'est pas un élémentinput
oubutton
, ou basculer la propriétédisabled
si c'est le cas :[Démo complète et combinée de JSFiddle][10].
Il convient de noter que la fonction ci-dessus fonctionne également avec tous les types d'entrée.
[1] : http://api.jquery.com/jQuery.fn.extend/ [2] : http://jsfiddle.net/JamesD/TFTvn/1/ [3] : http://api.jquery.com/prop/ [4] : http://www.w3.org/TR/html5/text-level-semantics.html#the-a-element [5] : http://api.jquery.com/event.preventDefault/ [6] : http://api.jquery.com/toggleClass/ [8] : http://jsfiddle.net/JamesD/TFTvn/15/ [9] : http://api.jquery.com/is/ [10] : http://jsfiddle.net/JamesD/TFTvn/14/
Je ne peux pas imaginer un moyen plus simple/plus facile ! ;-)
Utilisation des balises d'ancrage (liens) :
Pour activer la balise Anchor :
![entrez la description de l'image ici][1]
Pour désactiver la balise Anchor :
![entrez la description de l'image ici][2]
[1] : http://i.stack.imgur.com/Ud9Xu.png [2] : http://i.stack.imgur.com/zERjo.png
@James Donnelly a fourni une réponse complète qui repose sur l'extension de jQuery avec une nouvelle fonction. C'est une excellente idée, je vais donc adapter son code pour qu'il fonctionne comme je le souhaite.
Extension de jQuery
Utilisation
Le code traitera un seul élément ou une liste d'éléments.
Les boutons et les entrées supportent la propriété
disabled
et, si elle est définie àtrue
, ils auront l'air désactivés (grâce au bootstrap) et ne se déclencheront pas lorsqu'ils seront cliqués.Les ancres ne supportent pas la propriété
disabled
, nous allons donc nous appuyer sur la classe.disabled
pour qu'elles aient l'air désactivées (encore merci à bootstrap) et connecter un événement de clic par défaut qui empêche le clic en retournant false (pas besoin depreventDefault
, voir [ici][1]).Note : Vous n'avez pas besoin de décrocher cet événement lorsque vous réactivez les ancres. Il suffit de supprimer la classe
.disabled
.Bien sûr, cela ne sert à rien si vous avez attaché un gestionnaire de clics personnalisé au lien, ce qui est très courant lorsque vous utilisez bootstrap et jQuery. Pour résoudre ce problème, nous allons utiliser l'extension
isDisabled()
pour tester la classe.disabled
, comme ceci :J'espère que cela vous aidera à simplifier un peu les choses.
[1] : http://css-tricks.com/return-false-and-prevent-default/