Wie erhalte ich die enthaltene Form einer Eingabe?

106

Ich muss einen Verweis auf das FORM-Elternteil eines INPUT erhalten, wenn ich nur einen Verweis auf diesen INPUT habe. Ist das mit JavaScript möglich? Verwenden Sie jQuery, wenn Sie möchten.

function doSomething(element) {
    //element is input object
    //how to get reference to form?
}

Das funktioniert nicht:

var form = $(element).parents('form:first');

alert($(form).attr("name"));
Ropstah
quelle

Antworten:

185

Native DOM-Elemente, die Eingaben sind, haben auch ein formAttribut, das auf die Form verweist, zu der sie gehören:

var form = element.form;
alert($(form).attr('name'));

Laut w3schools wird die .formEigenschaft von Eingabefeldern von IE 4.0+, Firefox 1.0+ und Opera 9.0+ unterstützt. Dies sind noch mehr Browser, die jQuery garantiert. Sie sollten sich also daran halten.

Wenn dies ein anderer Elementtyp (kein Element <input>) wäre, könnten Sie das nächstgelegene übergeordnete Element finden mit closest:

var $form = $(element).closest('form');
alert($form.attr('name'));

Siehe auch diesen MDN-Link in der formEigenschaft von HTMLInputElement:

Paolo Bergantino
quelle
Okay, das funktioniert. Über das Formularattribut. Ich habe es gerade versucht und das funktioniert auch. Dies wird jedoch nicht für alle Browser unterstützt, die Sie sagen?
Ropstah
Ich bin mir ziemlich sicher, dass es so ist. Ich bin mir einfach nicht 100% sicher, also möchte ich nichts versprechen. Ich sehe es mir gerade an ...
Paolo Bergantino
5
Verwenden Sie element.form - es funktioniert mit mehr Browsern als jQuery. Es ist auch eine Eigenschaftsreferenz, die ungefähr tausendmal effizienter ist, als mit next () über den DOM-Baum zu gehen.
NickFitz
1
Genau. Wie gesagt, ich war mir anfangs nicht sicher, ob die Formulareigenschaft in allen gängigen Browsern umfassend implementiert war. Ich habe meine Antwort bearbeitet, um dies expliziter als die bessere Option aufzulisten, während ich als Leckerbissen am nächsten komme, wenn dies ein anderer Elementtyp war.
Paolo Bergantino
Es scheint auch mit anderen Eingabetypen wie select zu funktionieren. Gut zu wissen.
Falk
42

Jede Eingabe hat eine formEigenschaft, die auf die Form verweist, zu der die Eingabe gehört, also einfach:

function doSomething(element) {
  var form = element.form;
}
Gareth
quelle
4

Ich verwende ein bisschen jQuery und Javascript-Code im alten Stil

$($(this)[0].form) 

Dies ist eine vollständige Referenz auf das Formular, das das Element enthält

Nigel Francois
quelle
3
Sie sagen im Grunde: "Machen Sie dies zu einem jQuery-Objekt und dann nicht zu einem jQuery-Objekt."
Isherwood
1
Meine Güte, warum nicht einfach tun $(this.form)?
Andre Figueiredo
3

Verwenden von jQuery :

function doSomething(element) {
    var form = $(element).closest("form").get().
    //do something with the form.
}
Yfeldblum
quelle
2

Wenn Sie jQuery verwenden und ein Handle für ein Formularelement haben, müssen Sie das Element abrufen (0), bevor Sie .form verwenden

var my_form = $('input[name=first_name]').get(0).form;
Steven Wright
quelle
2
function doSomething(element) {
  var form = element.form;
}

und im HTML müssen Sie dieses Element finden und das Attribut "Formular" hinzufügen, um eine Verbindung zu diesem Formular herzustellen. Weitere Informationen finden Sie unter http://www.w3schools.com/tags/att_input_form.asp , dieses Formular jedoch nicht IE unterstützen , dh Sie müssen die Formular-ID direkt übergeben.

阳光 Emi
quelle
2

Ich musste element.attr('form')statt verwenden element.form.

Ich benutze Firefox unter Fedora 12.

Nikov
quelle
0

einfach als:

alert( $(this.form).attr('name') );
Sadnix
quelle
0

Und einer mehr....

var _e = $(e.target); // e being the event triggered
var element = _e.parent(); // the element the event was triggered on
console.log("_E " + element.context); // [object HTMLInputElement]
console.log("_E FORM " + element.context.form); // [object HTMLFormElement]
console.log("_E FORM " + element.context.form.id); // form id
Jadeye
quelle
0

Dieses Beispiel einer Javascript-Funktion wird von einem Ereignis-Listener aufgerufen, um das Formular zu identifizieren

function submitUpdate(event) {
    trigger_field = document.getElementById(event.target.id);
    trigger_form = trigger_field.form;
STEM FabLab
quelle
-2

würde das funktionieren (Wenn Sie die Aktion leer lassen, wird das Formular auch an sich selbst zurückgesendet, oder?)

<form action="">
<select name="memberid" onchange="this.form.submit();">
<option value="1">member 1</option>
<option value="2">member 2</option>
</select>

"this" wäre das Auswahlelement, .form wäre die übergeordnete Form. Richtig?

Josh P.
quelle