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.)

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");

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) : $();

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`
});

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 .


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.