2009-06-13 37 views
77

Necesito obtener una referencia al padre FORMULARIO de una ENTRADA cuando solo tengo una referencia a esa ENTRADA. ¿Es esto posible con JavaScript? Use jQuery si lo desea.¿Cómo obtener el formulario principal de una entrada?

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

esto no funciona:

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

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

$ (elemento) .parents ('forma: first'); funciona para mí usando jQuery 1.4.2 (sí, uno anterior) – Kreker

Respuesta

136

elementos DOM nativos que son insumos también tienen un atributo form que apunta a la forma que pertenecen:

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

Según w3schools , la propiedad .form de los campos de entrada es compatible con IE 4.0+, Firefox 1.0+, Opera 9.0+, que es incluso más navegadores que jQuery garantiza, por lo que debería apegarse a esto

Si esto fuera un tipo diferente de elemento (no es una <input>), se puede encontrar al padre más cercano con closest:

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

Además, vea este enlace MDN en la propiedad form de HTMLInputElement:

+0

Está bien, esto funciona .. Sobre el atributo de formulario. Lo intenté y eso también funciona. ¿Pero esto no es compatible con todos los navegadores que estás diciendo? – Ropstah

+0

Estoy bastante seguro de que lo es. Simplemente no estoy 100% seguro, así que no quiero prometer nada. Lo estoy buscando en este momento ... –

+4

Use element.form - funcionará en más navegadores que jQuery. También es una referencia de propiedad, por lo que será alrededor de mil veces más eficiente que subir el árbol DOM con el más cercano(). – NickFitz

3

Usando jQuery:

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

Cada entrada tiene una propiedad form que apunta a la forma de la entrada pertenece a, por lo que simplemente:

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

esto no funciona de alguna manera ..? – Ropstah

+0

@ Ropstah-- esto es tarde, pero 'element' es solo un nodo DOM no un objeto jquery. El uso de jquery sería $ (element) .attr ('form'), como señala Paolo en la respuesta aceptada. – ps2goat

2

necesitaba usar element.attr ('forma') en lugar de elemento .Form

yo uso firefox en Fedora 12

2

Si se utiliza jQuery y tener un mango a cualquier elemento de formulario, que necesita para obtener (0) el elemento antes de usar .Form

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

Yo uso un poco de jQuery y JavaScript estilo antiguo - menos código

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

Ésta es una referencia completa a la forma que contiene el elemento

+1

'$ (this.form)'. – Endless

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

y en el html , debe encontrar ese elemento y agregar el "formulario" atribut para conectarse a ese formulario, consulte http://www.w3schools.com/tags/att_input_form.asp pero este formulario attr no es compatible con IE, es decir, debe pasar la identificación del formulario directamente.

-2

¿funcionaría? (Dejando en blanco la acción presenta el formulario de nuevo a sí mismo, ¿verdad?)

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

"este" sería el elemento select, .Form sería su forma original. ¿Derecha?

0

simplemente como:

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

Y una más ....

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 
Cuestiones relacionadas