2009-06-13 7 views
77

Je dois obtenir une référence au parent FORM d'une INPUT quand j'ai seulement une référence à cette INPUT. Est-ce possible avec JavaScript? Utilisez jQuery si vous le souhaitez.Comment obtenir le parent du formulaire d'une entrée?

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

Cela ne fonctionne pas:

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

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

$ (élément) .parents ('forme: first'); fonctionne pour moi en utilisant jQuery 1.4.2 (ouais un ancien) – Kreker

Répondre

136

éléments DOM autochtones qui sont entrées ont aussi un attribut form qui pointe à la forme qu'ils appartiennent à:

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

Selon w3schools , la propriété .form des champs de saisie est prise en charge par IE 4.0+, Firefox 1.0+, Opera 9.0+, qui est encore plus de navigateurs que jQuery garantit, donc vous devrait s'en tenir à cela.

Si cela était un type d'élément différent (pas <input>), vous pouvez trouver le parent le plus proche avec closest:

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

Aussi, voir ce lien MDN sur la propriété form de HTMLInputElement:

+0

D'accord cela fonctionne .. A propos de l'attribut de formulaire. Je l'ai juste essayé et ça marche aussi. Mais ce n'est pas supporté par les navigateurs que vous dites? – Ropstah

+0

Je suis assez sûr que c'est. Je ne suis pas sûr à 100%, donc je ne veux rien promettre. Je regarde maintenant ... –

+4

Utilisez element.form - cela fonctionnera sur plus de navigateurs que jQuery. C'est aussi une référence de propriété, donc sera environ mille fois plus efficace que de remonter l'arbre DOM avec le plus proche(). – NickFitz

3

En utilisant jQuery:

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

Chaque entrée possède une propriété form qui pointe à la forme l'entrée appartient, si simplement:

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

cela ne fonctionne pas en quelque sorte ..? – Ropstah

+0

@ Ropstah-- c'est en retard, mais 'element' est juste un noeud DOM pas un objet jquery. L'utilisation de jquery serait $ (element) .attr ('form'), comme le note Paolo dans la réponse acceptée. – ps2goat

2

je devais utiliser element.attr (« forme ») au lieu de l'élément .form

J'utilise Firefox sur Fedora 12

2

Si vous utilisez jQuery et une poignée à tout élément de forme, vous devez obtenir (0) l'élément avant d'utiliser .form

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

J'utilise un peu de javascript de style jQuery et vieux - moins de code

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

Ceci est une référence complète à la forme contenant l'élément

+1

'$ (this.form)'. – Endless

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

et dans le code HTML , vous devez trouver cet élément, et ajouter l'attribut "formulaire" pour vous connecter à ce formulaire, s'il vous plaît se référer à http://www.w3schools.com/tags/att_input_form.asp mais ce formulaire attr ne prend pas en charge IE, par exemple, vous devez passer l'ID de formulaire directement.

-2

cela fonctionnerait-il? (En laissant en blanc d'action présente le formulaire à lui-même, non?)

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

« ce » serait l'élément select, .form serait sa forme mère. Droite?

0

simplement:

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

Et encore ....

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 
Questions connexes