Come disabilitare tutti gli <input> all'interno di un modulo con jQuery?


Risposte:


283

Nelle versioni precedenti potresti usare attr. A partire da jQuery 1.6 dovresti usare propinvece:

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

Per disabilitare tutti gli elementi del modulo all'interno di "target". Vedi :input:

Corrisponde a tutti gli elementi di input, textarea, select e button.

Se vuoi solo gli <input>elementi:

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

21
A partire da jQuery 1.6 dovresti usare$("#target :input").prop("disabled", true);
danijel

4
Qualcuno dovrebbe modificare la risposta con il metodo aggiornato - questa è solo una cattiva informazione a questo punto.
Ben Claar,

e in una callback submit (), usando $ (this), come fare?
Olivier Pons

2
@OlivierPons $(this).closest('form').find('input').prop('disabled', true);. Non sono sicuro di poterlo consolidare meglio, sono ancora piuttosto noobish su jQuery.
wjervis,

39

L'esempio sopra è tecnicamente errato. Per l'ultimo jQuery, utilizzare il prop()metodo dovrebbe essere usato per cose come disabilitato. Vedi la loro pagina API.

Per disabilitare tutti gli elementi del modulo all'interno di "target", utilizzare il selettore: input che corrisponde a tutti gli elementi input, textarea, select e button.

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

Se vuoi solo gli elementi, usa questo.

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

15

Inoltre, il modo più conciso è utilizzare il loro motore di selezione. Quindi, per disabilitare tutti gli elementi del modulo in un genitore div o form.

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

13

Puoi aggiungere

 <fieldset class="fieldset">

e poi puoi chiamare

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

8

Per disabilitare tutti i moduli, facile come scrivere:

jQuery 1.6+

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

jQuery 1.5 e precedenti

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

8

Con questa riga è possibile disabilitare qualsiasi campo di input in un modulo

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

ciò aggiunge inutilmente una proprietà disabilitata a ogni elemento nel modulo.
Osvaldo Maria,

@OsvaldoMaria sì, questo è dovuto al selettore a stella (tutto), potresti aggiungere una classe .custom a tutti gli elementi di input che vuoi disabilitare, quindi cambiare il selettore in $ ('form .custom-class'). Prop ( 'disabled', true ').
Samir Rahimy,

-1

La risposta definitiva (che copre le modifiche a jQuery api alla versione 1.6) è stata data da Gnarf


Ha chiesto di "disabilitare tutti gli input all'interno di un modulo", non solo "disabilitare tutti gli input".
Bengala,

@Bengala certo, ma mi stai contrassegnando duramente per essere il primo a sottolineare che l'API è cambiata. Al momento in cui ho pubblicato questo, nessuna delle altre risposte menzionava questo punto.
ErichBSchulz,

Capisco, ma penso che dovresti includere una risposta corretta con i rispettivi crediti, il link mostra solo come disabilitare tutti gli input, che insisto, non risponde affatto alla domanda.
Bengala,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.