2009-06-13 10 views
77

Ich brauche einen Verweis auf den Elternteil FORM eines INPUT, wenn ich nur einen Verweis auf diesen INPUT habe. Ist das mit JavaScript möglich? Verwenden Sie jQuery, wenn Sie möchten.Wie bekomme ich das Elternformular einer Eingabe?

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

funktioniert das nicht:

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

alert($(form).attr("name")); 
+1

$ (Element) .parents ('Form: erste'); funktioniert für mich mit jQuery 1.4.2 (yeah old one) – Kreker

Antwort

136

india DOM-Elemente, die Eingänge auch ein form Attribut sind, die das Formular verweisen sie gehören:

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

Nach w3schools Die .form Eigenschaft von Eingabefeldern wird von IE 4.0+, Firefox 1.0+, Opera 9.0+ unterstützt, das sind noch mehr Browser, die jQuery garantiert, also Sie sollte dabei bleiben.

Wenn dies eine andere Art von Elemente ist (keine <input>), können Sie den nächsten Elternteil mit closest finden können:

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

Auch finden Sie in diesem MDN Link auf der form Eigenschaft HTMLInputElement:

+0

In Ordnung das funktioniert .. Über das Formular-Attribut. Ich habe es gerade ausprobiert und das funktioniert auch. Aber das wird nicht in allen Browsern unterstützt, die du sagst? – Ropstah

+0

Ich bin mir ziemlich sicher, dass es so ist. Ich bin nur nicht 100% sicher, also will ich nichts versprechen. Ich untersuche es gerade ... –

+4

Verwenden Sie element.form - es funktioniert mit mehr Browsern als jQuery. Es ist auch eine Property-Referenz, also wird es tausendmal effizienter sein, als mit dem nächsten() den DOM-Baum hinaufzugehen. – NickFitz

3

Verwendung 210:

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

Jeder Eingang hat eine form Eigenschaft, die zu der Form weist der Eingang gehört, so einfach:

function doSomething(element) { 
    var form = element.form; 
} 
+0

das funktioniert irgendwie nicht ..? – Ropstah

+0

@ Ropstah-- das ist spät, aber 'element' ist nur ein DOM-Knoten und kein jquery-Objekt. jquery usage wäre $ (element) .attr ('form'), wie Paolo in der angenommenen Antwort feststellt. – ps2goat

2

Ich brauchte element.attr zu verwenden ('Form') anstelle von Element .form

ich benutze firefox auf Fedora 12

2

jQuery bei der Verwendung und einen Griff auf jede Form Element haben, müssen Sie (0) das Element, bevor .form mit

var my_form = $('input[name=first_name]').get(0).form; 
5

ich ein bisschen jQuery und alten Stil Javascript - weniger Code

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

Dies ist ein vollständiger Verweis auf das Formular mit dem Elemente

+1

'$ (this.form)'. – Endless

2
function doSomething(element) { 
    var form = element.form; 
} 

und im html , müssen Sie dieses Element finden und das attribut "form" hinzufügen, um sich mit diesem Formular zu verbinden, beziehen Sie sich bitte auf http://www.w3schools.com/tags/att_input_form.asp aber diese Form attr unterstützt IE nicht, dh Sie müssen die Formular-ID direkt übergeben.

-2

würde das funktionieren? (Aktion leer läßt geltend zu zurück zu sich selbst bilden, nicht wahr?)

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

„diese“ würde das select-Element sein, würde .form ihre Mutterform. Recht?

0

einfach als:

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

Und noch ....

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 
Verwandte Themen