jQuery übergeordnetes Formular finden

219

Ich habe dieses HTML

<ul>
    <li><form action="#" name="formName"></li>
    <li><input type="text" name="someName" /></li>
    <li><input type="text" name="someOtherName" /></li>
    <li><input type="submit" name="submitButton" value="send"></li>
    <li></form></li>
</ul>

Wie kann ich das Formular auswählen, zu dem input[name="submitButton"]das gehört? (Wenn ich auf die Schaltfläche "Senden" klicke, möchte ich das Formular auswählen und einige Felder darin anhängen.)

kmunky
quelle

Antworten:

485

Ich würde vorschlagen closest, Folgendes zu verwenden , um das am besten passende übergeordnete Element auszuwählen:

$('input[name="submitButton"]').closest("form");

Anstatt nach dem Namen zu filtern, würde ich Folgendes tun:

$('input[type=submit]').closest("form");
karim79
quelle
2
Vielleicht sollten wir das Erhalten nach Index hinzufügen? '$ ("input [type = submit]"). am nächsten ("form");' Gibt ein Array von Formularen zurück.
Sergzach
Ich versuche Folgendes wie folgt zu verwenden: $ (". Each img"). Click (function () {$ (this) .closest ("form"). Show ();}); Aber ich kann es nicht zum Laufen bringen. : /
Alisso
2
Peterjwest Antwort ist besser als diese.
Gagarine
In HTML5 gibt es ein neues Formularattribut, mit dem Sie das Element außerhalb des übergeordneten Formulars haben können. Dies sollte zuerst überprüft werden.
mcintyre321
56

Sie können die Formularreferenz verwenden, die für alle Eingaben vorhanden ist. Dies ist viel schneller als .closest()(5-10-mal schneller in Chrome und IE8). Funktioniert auch mit IE6 & 7.

var input = $('input[type=submit]');
var form = input.length > 0 ? $(input[0].form) : $();
Peterjwest
quelle
2
Sie erwähnen IE8. Funktioniert dies auch für die Versionen 6, 7 und 9?
Sonny
1
Dies ist viel besser und schneller als @peterjwest erwähnt. Zu IE6 denke ich .form auf Eingabeelementen war auf IE4, leider ist die netscape dev Seite jetzt weg ... und wer würde Mozilla eins überprüfen.
Maciej Łopaciński
Dies ist eine viel sicherere Methode als die Verwendung, closest()da eine Eingabe möglicherweise eine eigene Formularzuweisung hat: codepen.io/anon/pen/vNqEyg
Möhre
Sie haben wahrscheinlich die Kurzschreibweise if verwendet, um Ihren Code kurz zu halten. In diesem Beispiel lenkt sie jedoch nur vom eigentlichen Code ab, den Sie anzeigen möchten (insbesondere für Personen, die mit der Kurzschrift nicht vertraut sind). Ich würde es vorziehen, ein reguläres if () zu verwenden.
AeonOfTime
Ich würde sagen, dass diese Lösung zu viel Unordnung enthält. Wenn Sie dies tun (meine Lösung unten - ja, das ist eine Werbung :)): stackoverflow.com/a/18921404/261332 , dann brauchen Sie diese Art von Komplikationen nicht, da es nur funktioniert, wenn es soll und sonst nichts tun.
Userfuser
17

Für mich sieht das am einfachsten / schnellsten aus:

$('form input[type=submit]').click(function() { // attach the listener to your button
   var yourWantedObjectIsHere = $(this.form);   // use the native JS object with `this`
});
userfuser
quelle
2
Für mich ist die Verwendung $(this.form)die beste Lösung
jap1968
2

Ab HTML5-Browsern kann man verwenden inputElement.form- der Wert des Attributs muss eine ID eines <form>Elements im selben Dokument sein. Weitere Infos zu MDN .

Alexander Mihailov
quelle