2413 votes

Désactiver/activer une entrée avec jQuery ?

$input.disabled = true;

ou

$input.disabled = "disabled";

Quelle est la méthode standard ? Et, inversement, comment activer une entrée désactivée ?

6 votes

1 votes

J'ai trouvé le Dépend de plugin qui pourrait vous être utile

3977voto

gnarf Points 49213

JQuery 1.6+

Pour modifier le disabled vous devez utiliser la propriété .prop() fonction.

$("input").prop('disabled', true);
$("input").prop('disabled', false);

jQuery 1.5 et inférieur

Le site .prop() n'existe pas, mais .attr() fait de même :

Définissez l'attribut désactivé.

$("input").attr('disabled','disabled');

Pour activer à nouveau, la méthode correcte consiste à utiliser .removeAttr()

$("input").removeAttr('disabled');

Dans toutes les versions de jQuery

Vous pouvez toujours compter sur l'objet DOM actuel et c'est probablement un peu plus rapide que les deux autres options si vous ne traitez qu'un seul élément :

// assuming an event handler thus 'this'
this.disabled = true;

L'avantage d'utiliser le .prop() ou .attr() est que vous pouvez définir la propriété pour un ensemble d'éléments sélectionnés.


Note : Dans la version 1.6, il existe un .removeProp() qui ressemble beaucoup à removeAttr() mais il NE DOIT PAS ÊTRE UTILISÉ sur des propriétés natives comme 'disabled' Extrait de la documentation :

Remarque : n'utilisez pas cette méthode pour supprimer des propriétés natives telles que coché, désactivé ou sélectionné. Cela supprimera complètement la propriété et, une fois supprimée, elle ne pourra plus être ajoutée à l'élément. Utilisez .prop() pour définir ces propriétés à false.

En fait, je doute qu'il y ait beaucoup d'utilisations légitimes de cette méthode, les props booléens sont faits de telle manière que vous devez les mettre à faux au lieu de les "supprimer" comme leurs homologues "attributs" en 1.5.

9 votes

Par ailleurs, n'oubliez pas que, si vous souhaitez désactiver TOUS les contrôles de saisie du formulaire - y compris les cases à cocher, les radios, les zones de texte, etc. - vous devez sélectionner ':input' pas seulement 'input' . Ce dernier ne sélectionne que les éléments <input> réels.

36 votes

@CornelMasson input,textarea,select,button est un peu plus facile à utiliser que :input -- :input en tant que sélecteur est assez inefficace car il doit sélectionner * puis boucle sur chaque élément et filtre par nom de tigre - si vous passez les 4 sélecteurs de nom de tigre directement, c'est BEAUCOUP plus rapide. Aussi, :input n'est pas un sélecteur CSS standard. Par conséquent, tout gain de performance possible grâce à l'utilisation de l'option querySelectorAll sont perdus

3 votes

Est-ce que cela empêche simplement l'utilisateur d'y accéder, ou est-ce que cela le supprime réellement de la requête web ?

65voto

geekbuntu Points 183

C'est juste pour avoir de nouvelles conventions et pour pouvoir s'adapter à l'avenir (à moins que les choses ne changent radicalement avec l'ECMA6 ( ????)) :

$(document).on('event_name', '#your_id', function() {
    $(this).removeAttr('disabled');
});

et

$(document).off('event_name', '#your_id', function() {
    $(this).attr('disabled','disabled');   
});

12 votes

Jikes ! Pourquoi $(document).on('event_name', '#your_id', function() {...}) au lieu de $('#your_id').on('event_name', function() {...}) . Comme décrit dans le Documentation de jQuery .on() le premier utilise la délégation et écoute tous event_name les événements qui s'accumulent jusqu'à document et les vérifie pour une correspondance #your_id . Ce dernier écoute spécifiquement $('#your_id') uniquement les événements et qui s'adapte mieux.

26 votes

La première fonctionne pour les éléments insérés dans le DOM à tout moment, la seconde uniquement pour ceux qui existent à ce moment-là.

1 votes

@crazymykl Correct mais vous ne devez pas ajouter des éléments avec un id déjà présent sur votre page.

38voto

Harini Sekar Points 300
    // Disable #x
    $( "#x" ).prop( "disabled", true );
    // Enable #x
    $( "#x" ).prop( "disabled", false );

Parfois, vous avez besoin de désactiver/activer l'élément de formulaire comme l'entrée ou le textarea. Jquery vous aide à le faire facilement en définissant l'attribut disabled à "disabled". Par exemple :

  //To disable 
  $('.someElement').attr('disabled', 'disabled');

Pour activer un élément désactivé, vous devez supprimer l'attribut "disabled" de cet élément ou vider sa chaîne. Par exemple

//To enable 
$('.someElement').removeAttr('disabled');

// OR you can set attr to "" 
$('.someElement').attr('disabled', '');

référer : http://garmoncheg.blogspot.fr/2011/07/how-to-disableenable-element-with.html

3voto

Xinan Points 55

Faites juste attention si vous utilisez

$().removeProp("disabled");

qui ne fonctionnera pas. C'est un peu délicat...

-1voto

Quang Vinh Points 51

Pour n'importe quelle version de jQuery, vous devez utiliser seulement .attr() et .removeAttr()

$("input").attr('disabled','disabled');
$("input").removeAttr('disabled');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X