Wie erhalte ich alle Formularelemente (Eingabe, Textbereich & Auswahl) mit jQuery?
Lesezeit: 2 Minuten
Johannes Magnolie
Gibt es eine einfache Möglichkeit (ohne sie alle separat aufzulisten) in jquery, alle Formularelemente und nur Formularelemente auszuwählen.
Ich kann children() usw. nicht verwenden, da das Formular anderes HTML enthält.
Z.B:
$("form").each(function(){
let $inputs = $("input, textarea, select", this);
});
Selvakumar Arumugam
Bearbeiten: Wie in den Kommentaren (Mario Awad & Brock Hensley) erwähnt, verwenden .find um die Kinder zu bekommen
$("form").each(function(){
$(this).find(':input') //<-- Should return all input elements in that specific form.
});
Formulare haben auch eine Elementsammlung, die sich manchmal von untergeordneten Elementen unterscheidet, z. B. wenn sich das Formular-Tag in einer Tabelle befindet und nicht geschlossen ist.
var summary = [];
$('form').each(function () {
summary.push('Form ' + this.id + ' has ' + $(this).find(':input').length + ' child(ren).');
summary.push('Form ' + this.id + ' has ' + this.elements.length + ' form element(s).');
});
$('#results').html(summary.join('<br />'));
$(“form”).each(function(){ $(‘:input’, this)//<-- Sollte alle Eingabeelemente in dieser spezifischen Form zurückgeben. });
Wie in den Dokumenten angegeben
Um die beste Leistung bei der 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”).
Sie können wie unten verwenden,
$("form").each(function(){
$(this).filter(':input') //<-- Should return all input elements in that specific form.
});
Danke, obwohl nach dem Lesen: api.jquery.com/input-selector Da die Leistung ein Problem ist, kann ich sie auch auflisten. Aber gut zu wissen, dass es möglich ist
– Johannes Magnolie
12. Oktober 2012 um 15:49 Uhr
Geht es nur mir so oder funktioniert das nicht select? EDIT: egal, funktioniert mit select wenn ich es benutze find(':input')
– Brock Hensley
20. Juni 2013 um 14:28 Uhr
Sie müssen hier “find” anstelle von “filter” verwenden, da “filter” nicht auf ein einzelnes Element wirken kann (in diesem Fall das “this”-Element). Mit “Filter” können Sie keine Formularelemente auswählen und nicht nur Elemente “auswählen”. Danke für @Brock Hensley für den Hinweis.
– Mario Awad
30. Dezember 2014 um 12:50 Uhr
Wie wäre es mit großen Formularen? Ich habe ein riesiges Formular mit mehr als 4000+ Elementen darin, und dieser Selektor ist sehr langsam. In der Spezifikation steht geschrieben, dass :input nicht durch CSS3 browseroptimiert ist, also bei mir nicht funktioniert :/ . Irgendwelche anderen Ideen?
– Wassil Popov
23. Juni 2015 um 8:02 Uhr
@VasilPopov Das Obige ist möglicherweise zu langsam für Sie. Sie könnten einige Lösungen ausprobieren, in beiden Fällen müssen Sie weniger Elemente gruppieren und auswählen.
– Selvakumar Arumugam
24. Juni 2015 um 14:32 Uhr
Srinivasan.S
Der folgende Code hilft, die Details der Elemente aus dem spezifischen Formular mit der Formular-ID abzurufen,
Der folgende Code hilft, die Details von Elementen zu erhalten, die auf der Ladeseite platziert sind, auch wenn das Element nicht innerhalb des Tags platziert ist.
HINWEIS: Wir fügen den mehr Element-Tag-Namen hinzu, den wir in der Objektliste benötigen, wie unten,
Example: to get name of attribute "textarea",
$('input, select, textarea').each(
function(index){
var input = $(this);
alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
}
);
Warum dies alle Werte und Optionen eines ausgewählten Elements übernimmt, anstatt den Wert von etwas anzugeben, das ausgewählt oder anderweitig leer ist. ?
– Benutzer2906838
16. August 2016 um 8:29 Uhr
Diese Selektoren ignorieren Radiobuttons und Checkboxen. die mit ausgewählt werden können "formSelector:input". Außerdem ist es nicht möglich, den Status von Kontrollkästchen und Optionsfeldern mit zu lesen .val() es muss mit verifiziert werden ":checked"
– AaA
6. September 2021 um 7:04 Uhr
Wenn Sie weitere Typen haben, bearbeiten Sie den Selektor:
var formElements = new Array();
$("form :input").each(function(){
formElements.push($(this));
});
Alle Formularelemente befinden sich nun im Array formElements.
Avnish alok
JQuery serialisieren Funktion macht es ziemlich einfach, alle Formularelemente zu erhalten.
$("form").serialize(); //get all form elements at once
//result would be like this:
single=Single&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio1
Um diese Idee zu vervollständigen: Sie können so etwas verwenden, um alle Formularelemente zugänglich zu machen.
Data = $('form').serialize().split('&');
for(i in Data){
Data[i] = Data[i].split('=');
Fields[ Data[i][0] ] = [ Data[i][1],
$('form *[name="' + Data[i][0] + '"]').eq(0) ];
}
console.log(Fields);
// The result would be a multi-dimensional array you could loop through
Fields[Field_Name] = [Field_Value, Field_Object]
Hinweis: Dies funktioniert nur mit benannten Feldern, da serialize() alle anderen ignoriert. Alle Felder mit doppelten Namen werden ignoriert. Sie könnten ein mehrdimensionales Array erstellen, wenn mehrere Felder denselben Namen verwenden.
Igor Parra
Für das Protokoll: Das folgende Snippet kann Ihnen helfen um Details über Input, Textarea, Select, Button, a zu erhalten Tags durch einen temporären Titel, wenn Sie den Mauszeiger darüber bewegen.
$( 'body' ).on( 'mouseover', 'input, textarea, select, button, a', function() {
var $tag = $( this );
var $form = $tag.closest( 'form' );
var title = this.title;
var id = this.id;
var name = this.name;
var value = this.value;
var type = this.type;
var cls = this.className;
var tagName = this.tagName;
var options = [];
var hidden = [];
var formDetails="";
if ( $form.length ) {
$form.find( ':input[type="hidden"]' ).each( function( index, el ) {
hidden.push( "\t" + el.name + ' = ' + el.value );
} );
var formName = $form.prop( 'name' );
var formTitle = $form.prop( 'title' );
var formId = $form.prop( 'id' );
var formClass = $form.prop( 'class' );
formDetails +=
"\n\nFORM NAME: " + formName +
"\nFORM TITLE: " + formTitle +
"\nFORM ID: " + formId +
"\nFORM CLASS: " + formClass +
"\nFORM HIDDEN INPUT:\n" + hidden.join( "\n" );
}
var tempTitle =
"TAG: " + tagName +
"\nTITLE: " + title +
"\nID: " + id +
"\nCLASS: " + cls;
if ( 'SELECT' === tagName ) {
$tag.find( 'option' ).each( function( index, el ) {
options.push( el.value );
} );
tempTitle +=
"\nNAME: " + name +
"\nVALUE: " + value +
"\nTYPE: " + type +
"\nSELECT OPTIONS:\n\t" + options;
} else if ( 'A' === tagName ) {
tempTitle +=
"\nHTML: " + $tag.html();
} else {
tempTitle +=
"\nNAME: " + name +
"\nVALUE: " + value +
"\nTYPE: " + type;
}
tempTitle += formDetails;
$tag.prop( 'title', tempTitle );
$tag.on( 'mouseout', function() {
$tag.prop( 'title', title );
} )
} );
Tolle Funktion! Vielen Dank
– Mohamad Hamouday
17. Juni 2017 um 2:43 Uhr
Dies ist meine Lieblingsfunktion und sie funktioniert wie ein Zauber für mich!
Es gibt ein Objekt mit allen Daten für Eingabe, Auswahl und Textbereich zurück.
Und es wird versucht, Objektnamen zu erhalten, indem nach Elementen gesucht wird name else Id else class.
var form_data = get_form_data();
console.log(form_data);
jQuery behält einen Verweis auf das Vanilla-JS-Formularelement, und dieses enthält einen Verweis auf alle untergeordneten Elemente des Formulars. Sie könnten einfach die Referenz greifen und fortfahren: