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

145
<form id="target">
....
</form>
OMG
la source

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);
cletus
la source
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);
MétaSkills
la source
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)
MétaSkills
la source
13

vous pouvez ajouter

 <fieldset class="fieldset">

et ensuite vous pouvez appeler

 $('.fieldset').prop('disabled', true);
Otto Kanellis
la source
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');
Ange Cuenca
la source
8

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

$('form *').prop('disabled', true);
Samir Rahimy
la source
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

ErichBSchulz
la source
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