Comment désactiver tous les <input> dans un formulaire avec jQuery?


145
<form id="target">
....
</form>

Réponses:


283

Dans les anciennes versions, vous pouvez utiliser attr. À partir de jQuery 1.6, vous devriez utiliser à la propplace:

$("#target :input").prop("disabled", true);

Pour désactiver tous les éléments de formulaire à l'intérieur de «cible». Voir :input:

Correspond à tous les éléments input, textarea, select et button.

Si vous ne voulez que les <input>éléments:

$("#target input").prop("disabled", true);

21
À partir de jQuery 1.6, vous devriez utiliser$("#target :input").prop("disabled", true);
danijel

4
Quelqu'un devrait modifier la réponse avec la méthode mise à jour - ce ne sont que de mauvaises informations à ce stade.
Ben Claar

et dans un callback submit (), en utilisant $ (this), comment faire cela?
Olivier Pons

2
@OlivierPons $(this).closest('form').find('input').prop('disabled', true);. Je ne sais pas si vous pouvez mieux consolider cela, je ne suis toujours pas satisfait de jQuery.
wjervis le

39

L'exemple ci-dessus est techniquement incorrect. Selon le dernier jQuery, utilisez la prop()méthode pour des choses comme désactivé.Voir leur page API.

Pour désactiver tous les éléments de formulaire à l'intérieur de 'target', utilisez le sélecteur: input qui correspond à tous les éléments input, textarea, select et button.

$("#target :input").prop("disabled", true);

Si vous ne voulez que les éléments, utilisez ceci.

$("#target input").prop("disabled", true);

15

La manière la plus concise est également d'utiliser leur moteur de sélection. Donc, pour désactiver tous les éléments de formulaire dans un parent div ou formulaire.

$myForm.find(':input:not(:disabled)').prop('disabled',true)

13

vous pouvez ajouter

 <fieldset class="fieldset">

et ensuite vous pouvez appeler

 $('.fieldset').prop('disabled', true);

8

Pour désactiver tous les formulaires, aussi simple que d'écrire:

jQuery 1.6+

$("#form :input").prop("disabled", true);

jQuery 1.5 et inférieur

$("#form :input").attr('disabled','disabled');

8

Avec cette ligne, vous pouvez désactiver n'importe quel champ de saisie dans un formulaire

$('form *').prop('disabled', true);

cela ajoute inutilement une propriété désactivée à chaque élément du formulaire.
Osvaldo Maria

@OsvaldoMaria ouais, c'est à cause du sélecteur star (all), vous pouvez ajouter une classe .custom à tous les éléments d'entrée que vous souhaitez désactiver, puis changer le sélecteur en $ ('form .custom-class'). Prop ( 'désactivé', vrai ').
Samir Rahimy

-1

La réponse définitive (couvrant les modifications apportées à jQuery api à la version 1.6) a été donnée par Gnarf


Il a demandé de "désactiver toutes les entrées dans un formulaire", et pas seulement de "désactiver toutes les entrées".
Bengala

@Bengala bien sûr, mais vous me marquez durement pour avoir été le premier à souligner que l'API avait changé. Au moment où j'ai posté cela, aucune des autres réponses ne mentionnait ce point.
ErichBSchulz

Je comprends, mais je pense que vous devriez inclure une réponse correcte avec les crédits respectifs, le lien montre simplement comment désactiver toutes les entrées, ce que j'insiste, il ne répond pas du tout à la question.
Bengala le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.