Boutons
Les boutons sont simples à désactiver car désactivé
est une propriété du bouton qui est gérée par le navigateur :
Mon Bouton
Pour les désactiver avec une fonction jQuery personnalisée, il vous suffit d'utiliser fn.extend()
:
// Fonction de désactivation
jQuery.fn.extend({
disable: function(state) {
return this.each(function() {
this.disabled = state;
});
}
});
// Désactivé avec :
$('input[type="submit"], input[type="button"], button').disable(true);
// Activé avec :
$('input[type="submit"], input[type="button"], button').disable(false);
Démo de bouton et input désactivés JSFiddle.
Autrement, vous pouvez utiliser la méthode prop()
de jQuery :
$('button').prop('disabled', true);
$('button').prop('disabled', false);
Balises d'Ancre
Il convient de noter que désactivé
n'est pas une propriété valide pour les balises d'ancre. Pour cette raison, Bootstrap utilise le style suivant sur ses éléments .btn
:
.btn.désactivé, .btn[désactivé] {
curseur : par défaut;
image d'arrière-plan : aucune;
opacité : 0.65;
filtre : alpha(opacity=65);
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
couleur : #333;
couleur de fond : #E6E6E6;
}
Remarquez comment la propriété [désactivé]
est ciblée ainsi qu'une classe .désactivé
. La classe .désactivé
est nécessaire pour rendre une balise d'ancre désactivée.
Mon Lien
Bien sûr, cela n'empêchera pas les liens de fonctionner lorsqu'ils sont cliqués. Le lien ci-dessus nous dirigera vers http://exemple.com. Pour éviter cela, nous pouvons ajouter un simple morceau de code jQuery pour cibler les balises d'ancre avec la classe désactivé
pour appeler event.preventDefault()
:
$('body').on('click', 'a.désactivé', function(event) {
event.preventDefault();
});
Nous pouvons activer/désactiver la classe désactivé
en utilisant toggleClass()
:
jQuery.fn.extend({
disable: function(state) {
return this.each(function() {
var $this = $(this);
$this.toggleClass('disabled', state);
});
}
});
// Désactivé avec :
$('a').disable(true);
// Activé avec :
$('a').disable(false);
Démo de lien désactivé JSFiddle.
Combiné
Nous pouvons ensuite étendre la fonction de désactivation précédente pour vérifier le type d'élément que nous essayons de désactiver en utilisant is()
. De cette manière, nous pouvons utiliser toggleClass()
s'il ne s'agit pas d'un élément input
ou button
, ou basculer la propriété désactivé
si c'est le cas :
// Fonction de désactivation étendue
jQuery.fn.extend({
disable: function(state) {
return this.each(function() {
var $this = $(this);
if($this.is('input, button, textarea, select'))
this.disabled = state;
else
$this.toggleClass('disabled', state);
});
}
});
// Désactivé sur tout :
$('input, button, a').disable(true);
// Activé sur tout :
$('input, button, a').disable(false);
Démo JSFiddle complète combinée.
Il convient de noter que la fonction ci-dessus fonctionnera également pour tous les types d'input.
0 votes
Voir mon post en bas, mais voici le moins descriptif $("yourSelector").button("enable"); // activer le bouton ou $("yourSelector").button("disable"); // désactiver le bouton si le widget de bouton de jqueryUI est utilisé.
0 votes
La documentation de BS3 indique d'utiliser
role="button"
pour les liens, mais cela ne semble pas affecter ce problème. getbootstrap.com/css/#buttons2 votes
Avoir
a.btn[disabled]
apparaître comme désactivé tout en restant cliquable est un bug dans Bootstrap à mon avis. L'attribut[disabled]
ne devrait apparaître désactivé que pourbutton
etinput
.