2010-08-30 25 views
18

Estoy tratando de encontrar la forma de los padres del elemento utilizando el código de abajo:¿Cómo encontrar el formulario padre del elemento?

<form id="f1" action="action1.html"> 
form1 <button id="btn1" onclick="testaction(this); return false;" >test form 1</button> 
</form> 


<script type="text/javascript" > 
function testaction(element) { 
    var e = $(element.id); 
    var form = e.parent('form'); 

    alert(form.id); // undefined!! 
    alert(form.action); // undefined!! 
    alert(document.forms[0].action); //http://localhost/action1.html 
} 
</script> 

Debe ser algo muy simple .... Gracias de antemano

+2

'.parent' solo da s el antecesor inmediato. –

+3

Debería simplemente '$ (elemento)' en lugar de '$ (elemento.id)'. – kennytm

+0

¿qué tal 'btn1.form'? – Sergei

Respuesta

12

El problema que tiene es que form es un objeto jQuery, no un objeto DOM. Si desea que sea el objeto de formulario, lo haría e.parent('form').get(0).

Además, está tratando el elemento incorrectamente - jQuery toma los selectores de id en el formato #id pero lo ha pasado id.

Aquí hay una versión de trabajo:

function testaction(element) { 
    var e = $(element);//element not element.id 
    var form = e.parent('form').get(0);//.get(0) added 

    alert(form.id); // undefined!! 
    alert(form.action); // undefined!! 
    alert(document.forms[0].action); //http://localhost/action1.html 
} 

ver esto por que en la acción: http://jsfiddle.net/BTmwq/

EDITAR: ortografía, claridad

+0

La 'forma' variable sería 'indefinida' aquí. La solución de @jAndy funcionó. – Roland

38

http://api.jquery.com/closest/ lo hará. Se utiliza como esto

$('#elem').closest('form'); 
+4

La mejor solución, a diferencia de los padres() se detiene una vez que encuentra una coincidencia –

+0

cómo es mejor que 'btn1.form'? – Sergei

0
$(".whatever").parents("form"); 
+3

más cercano() es una solución mucho mejor ya que se detiene una vez que se encuentra una coincidencia –

6

Tira el controlador de eventos en línea a bordo y mantenerse discreta aquí.

$(document).ready(function(){ 
    $('#btn1').bind('click', function(){ 
     var form = $(this).closest('form')[0]; 

     alert(form.id); // defined 
     alert(form.action); // defined 
    }); 
}); 

Ref .: .closest(), .bind()

+0

'closer (" form ") [0]' fue la solución correcta, devolviendo un elemento apropiado. 'parent ('form'). get (0)' returned' undefined'! – Roland

Cuestiones relacionadas