Wie deaktiviere ich alle <Eingaben> in einem Formular mit jQuery?

145
<form id="target">
....
</form>
Oh mein Gott
quelle

Antworten:

283

In älteren Versionen könnten Sie verwenden attr. Ab jQuery 1.6 sollten Sie propstattdessen Folgendes verwenden :

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

So deaktivieren Sie alle Formularelemente in 'Ziel'. Siehe :input:

Entspricht allen Eingabe-, Textbereichs-, Auswahl- und Schaltflächenelementen.

Wenn Sie nur die <input>Elemente wollen :

$("#target input").prop("disabled", true);
Cletus
quelle
21
Ab jQuery 1.6 sollten Sie verwenden$("#target :input").prop("disabled", true);
danijel
4
Jemand sollte die Antwort mit der aktualisierten Methode bearbeiten - dies sind an dieser Stelle nur schlechte Informationen.
Ben Claar
und wie geht das in einem submit () - Rückruf mit $ (this)?
Olivier Pons
2
@OlivierPons $(this).closest('form').find('input').prop('disabled', true);. Ich bin mir nicht sicher, ob Sie das besser konsolidieren können, aber ich bin bei jQuery immer noch ziemlich noobisch.
wjervis
39

Das obige Beispiel ist technisch falsch. Gemäß der neuesten jQuery sollte die prop()Methode für Dinge wie deaktiviert verwendet werden. Siehe ihre API-Seite.

Um alle Formularelemente innerhalb von 'target' zu deaktivieren, verwenden Sie die Eingabeauswahl:, die allen Eingabe-, Textbereichs-, Auswahl- und Schaltflächenelementen entspricht.

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

Wenn Sie nur die Elemente möchten, verwenden Sie diese.

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

Der prägnantere Weg ist auch die Verwendung der Selektor-Engine. So deaktivieren Sie alle Formularelemente in einem div oder übergeordneten Formular.

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

Du kannst hinzufügen

 <fieldset class="fieldset">

und dann können Sie anrufen

 $('.fieldset').prop('disabled', true);
Otto Kanellis
quelle
8

So deaktivieren Sie alle Formulare, so einfach wie das Schreiben:

jQuery 1.6+

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

jQuery 1.5 und niedriger

$("#form :input").attr('disabled','disabled');
Engel Cuenca
quelle
8

Mit dieser einen Zeile können Sie jedes Eingabefeld in einem Formular deaktivieren

$('form *').prop('disabled', true);
Samir Rahimy
quelle
Dadurch wird jedem Element im Formular unnötigerweise eine deaktivierte Eigenschaft hinzugefügt.
Osvaldo Maria
@OsvaldoMaria Ja, das liegt am Stern-Selektor (all). Sie können allen Eingabeelementen, die Sie deaktivieren möchten, eine .custom-Klasse hinzufügen und dann den Selektor in $ ('form .custom-class') ändern. Prop ( 'deaktiviert', wahr ').
Samir Rahimy
-1

Die endgültige Antwort (Änderungen an der jQuery-API in Version 1.6) wurde von Gnarf gegeben

ErichBSchulz
quelle
Er bat darum, "alle Eingaben innerhalb eines Formulars zu deaktivieren" und nicht nur "alle Eingaben zu deaktivieren".
Bengala
@Bengala sicher, aber Sie markieren mich hart dafür, dass ich als erster darauf hingewiesen habe, dass sich die API geändert hat. Zu der Zeit, als ich dies gepostet habe, erwähnte keine der anderen Antworten diesen Punkt.
ErichBSchulz
Ich verstehe, aber ich denke, Sie sollten den jeweiligen Credits eine korrekte Antwort beifügen. Der Link zeigt nur, wie alle Eingaben deaktiviert werden. Ich bestehe darauf, dass er die Frage überhaupt nicht beantwortet.
Bengala