2009-06-13 15 views
77

Ho bisogno di ottenere un riferimento al parent form di un INPUT quando ho solo un riferimento a quello INPUT. Questo è possibile con JavaScript? Usa jQuery se vuoi.Come ottenere il formato padre di un input?

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

Questo non funziona:

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

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

$ (elemento) .parents ('forma: prima'); funziona per me usando jQuery 1.4.2 (sì vecchio) – Kreker

risposta

136

elementi DOM nativi che sono ingressi hanno anche un attributo form che punta al modulo di appartenenza:

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

Secondo w3schools , la proprietà .form dei campi di input è supportata da IE 4.0+, Firefox 1.0+, Opera 9.0+, che è ancora più browser garantito da jQuery, quindi tu dovrebbe attenersi a questo.

Se questo fosse un diverso tipo di elemento (non un <input>), si potrebbe trovare il genitore più vicina con closest:

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

Inoltre, vedere questo link MDN sulla form proprietà di HTMLInputElement:

+0

Va bene, questo funziona .. Informazioni sull'attributo del modulo. Ho appena provato e funziona anche. Ma questo non è supportato tra i browser che stai dicendo? – Ropstah

+0

Sono abbastanza sicuro che lo sia. Non sono sicuro al 100% quindi non voglio promettere nulla. Sto cercando proprio adesso ... –

+4

Usa element.form - funzionerà su più browser di jQuery. È anche un riferimento di proprietà, quindi sarà circa mille volte più efficiente rispetto a salire l'albero DOM con il più vicino(). – NickFitz

3

Utilizzando jQuery:

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

Ogni ingresso ha una proprietà form che punta alla forma l'ingresso appartiene, così semplicemente:

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

questo non funziona in qualche modo ..? – Ropstah

+0

@ Ropstah-- questo è in ritardo, ma 'element' è solo un nodo DOM non un oggetto jquery. l'uso di jquery sarebbe $ (elemento) .attr ('form'), come nota Paolo nella risposta accettata. – ps2goat

2

avevo bisogno di usare element.attr ('forma') invece dell'elemento .Form

io uso firefox su Fedora 12

2

Se si utilizza jQuery e avere una maniglia a qualsiasi elemento del modulo, è necessario per ottenere (0) l'elemento prima di utilizzare .Form

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

io uso un po 'di jQuery e vecchio javascript stile - meno codice

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

Questo è un riferimento completo per il modulo contenente l'elemento

+1

'$ (this.form)'. – Endless

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

e nel codice HTML , è necessario trovare tale elemento e aggiungere il "modulo" attribut per collegarsi a tale modulo, fare riferimento a http://www.w3schools.com/tags/att_input_form.asp ma questa forma attr. non supporta IE, per esempio, è necessario passare direttamente l'id del modulo.

-2

sarebbe questo lavoro? (Lasciando vuoto l'azione sottopone forma a se stessa, giusto?)

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

"questo" sarebbe l'elemento di selezione, .Form sarebbe il suo form padre. Destra?

0

semplicemente come:

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

E un altro ancora ....

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 
Problemi correlati