Gibt es eine Möglichkeit, alle Felder (Textbereich / Textfeld / Option / Eingabe / Kontrollkästchen / Senden usw.) in einem Formular zu deaktivieren, indem nur der übergeordnete Div-Name in jquery / javascript angegeben wird?
Beachten Sie, dass Sie auf diese Weise die Werte dieser Elemente beim Senden des Formulars "verschwinden" lassen - um den Wert beizubehalten readOnly, machen Sie sie nicht deaktiviert.
Eine Idee könnte darin bestehen, ein Div vor den Steuerelementen auszublenden / anzuzeigen, auf die geklickt werden soll / verhindert wird, sowie deaktivierte Steuerelemente mit CSS.
Jaider
Antworten:
261
Versuchen Sie, den :inputSelektor zusammen mit einem übergeordneten Selektor zu verwenden:
Kann ich damit alle Eingänge in div auf den Wert 0 setzen?
Jackson5
2
Ich möchte <a> auch deaktivieren ... Mein <a> hat auch einen Klick
RAJ
7
Zitieren von jQuery : Da: input eine jQuery-Erweiterung ist und nicht Teil der CSS-Spezifikation ist, können Abfragen mit: input die Leistungssteigerung der nativen DOM querySelectorAll () -Methode nicht nutzen. Um die beste Leistung bei Verwendung von: input zur Auswahl von Elementen zu erzielen, wählen Sie die Elemente zuerst mit einem reinen CSS-Selektor aus und verwenden Sie dann .filter (": input").
Acme
2
@acme: 100% zustimmen, aber die Frage gibt keinen Hinweis darauf, nach welchem Selektor ich möglicherweise filtern könnte. Die einzige Information, die mir gegeben wurde, war, dass der Benutzer in der Lage sein muss, dies mit einem übergeordneten divNamen zu tun, und das war's. Wenn ich mehr Informationen bekommen hätte, hätte ich eine effizientere Lösung finden können.
Andrew Whitaker
1
Verwenden Sie .prop () anstelle von .attr () (über jquery 1.6)
Es sollte sein ('Eingabe, Textbereich, Schaltfläche'), dass alle Selektoren mit einem Satz von Anführungszeichen in Anführungszeichen gesetzt werden sollten. api.jquery.com/multiple-selector Wenn Sie es so machen, wie Sie es tun, senden Sie mehrere Argumente.
Ivan Ivanić
2
Hier finden Sie nur Eingaben, Textbereiche und Schaltflächen werden ignoriert. Die Eingabeauswahl: ist der richtige Weg, aber wenn Sie sie explizit auflisten möchten, müssen Sie sie verwenden $('#mydiv').find('input, textarea, button').
Mark Hildreth
1
... oder einfach $ ('# your-form'). children (). prop ('disabled', true);
Walv
@walv Ihr Code funktioniert nur, wenn alle Formularelemente ein einziger Nachkomme des Formulars sind. Find () findet alle Elemente in der Liste unabhängig von der absteigenden Ebene. Diese Codezeile ist korrekt, abgesehen von der Verwendung der Requisite anstelle von attr für neue jquery-Versionen.
Chris O
32
Verwenden Sie für jquery 1.6+ .prop()anstelle von .attr(),
Ich benutze die Funktion unten an verschiedenen Stellen. Funktioniert in Div- oder Button-Elementen in einer Tabelle, solange der rechte Selektor verwendet wird. Nur ": button" würde für mich nicht wieder aktiviert.
Im Folgenden werden alle Eingaben deaktiviert, es kann jedoch keine BTN-Klasse verwendet werden. Außerdem wird eine Klasse hinzugefügt, um die Deaktivierung von CSS zu überschreiben.
Für mich funktionierte die akzeptierte Antwort nicht, da ich einige versteckte Asp-Net-Felder hatte, die ebenfalls deaktiviert wurden, sodass ich nur sichtbare Felder deaktivierte
//just to save the list so we can enable fields latervar list =[];
$('#parent-selector').find(':input:visible:not([readonly][disabled]),button').each(function(){
list.push('#'+this.id);});
$(list.join(',')).attr('readonly',true);
readOnly
, machen Sie sie nicht deaktiviert.Antworten:
Versuchen Sie, den
:input
Selektor zusammen mit einem übergeordneten Selektor zu verwenden:quelle
div
Namen zu tun, und das war's. Wenn ich mehr Informationen bekommen hätte, hätte ich eine effizientere Lösung finden können.quelle
$('#mydiv').find('input, textarea, button')
.Verwenden Sie für jquery 1.6+
.prop()
anstelle von.attr()
,oder
quelle
quelle
Einfach diese Codezeile deaktiviert alle Eingabeelemente
quelle
Wie wäre es, wenn Sie nur das HTML-Attribut "deaktiviert" verwenden?
Wenn Sie deaktiviert in das Feldset einfügen, werden alle Felder in diesem Feldset deaktiviert.
quelle
Ich benutze die Funktion unten an verschiedenen Stellen. Funktioniert in Div- oder Button-Elementen in einer Tabelle, solange der rechte Selektor verwendet wird. Nur ": button" würde für mich nicht wieder aktiviert.
quelle
Im Folgenden werden alle Eingaben deaktiviert, es kann jedoch keine BTN-Klasse verwendet werden. Außerdem wird eine Klasse hinzugefügt, um die Deaktivierung von CSS zu überschreiben.
CSS-Klasse
quelle
Für mich funktionierte die akzeptierte Antwort nicht, da ich einige versteckte Asp-Net-Felder hatte, die ebenfalls deaktiviert wurden, sodass ich nur sichtbare Felder deaktivierte
quelle
Verwenden Sie die CSS-Klasse, um zu verhindern, dass die Div-Elemente bearbeitet werden
CSS:
JS:
Oder fügen Sie den Klassennamen in HTML Tag hinzu. Dadurch wird verhindert, dass die Div-Elemente bearbeitet werden.
quelle
Nur Texttyp
Nur Passworttyp
Nur E-Mail-Typ
quelle