2009-10-25 11 views
189

tengo este htmljQuery encontrar formulario primario

<ul> 
    <li><form action="#" name="formName"></li> 
    <li><input type="text" name="someName" /></li> 
    <li><input type="text" name="someOtherName" /></li> 
    <li><input type="submit" name="submitButton" value="send"></li> 
    <li></form></li> 
</ul> 

¿Cómo puedo seleccionar el formulario que el input[name="submitButton"] es parte de? (cuando hago clic en el botón de envío deseo seleccionar el formulario y anexar algunos campos en ella)

Respuesta

437

se recomienda usar closest, que selecciona el elemento más cercano primario coincidente:

$('input[name="submitButton"]').closest("form"); 

En lugar de filtrado por el nombre, me gustaría hacer esto:

$('input[type=submit]').closest("form"); 
+0

Muchas gracias! Realmente estaba luchando con esto. –

+2

¿Podría ser que deberíamos agregar obtener por índice? '$ ("input [type = submit]") más cercano ("form");' devuelve una matriz de formularios. – sergzach

+0

Estoy tratando de usar lo anterior de esta manera: $ (".cada img"). Haga clic en (función() { $ (this) .closest ("formulario"). Show(); }); Pero parece que no puedo hacer que funcione. :/ – Alisso

52

Puede utilizar la referencia de formulario que existe en todas las entradas, esto es mucho más rápido que .closest() (5-10 veces más rápido en Chrome e IE8). Funciona en IE6 & 7 también.

var input = $('input[type=submit]'); 
var form = input.length > 0 ? $(input[0].form) : $(); 
+2

Mencionas IE8. ¿Funciona esto también para las versiones 6, 7 y 9? – Sonny

+1

Esto es mucho mejor y más rápido que @peterjwest mencionado. Re IE6 Creo que .form en los elementos de entrada estaba en IE4, desafortunadamente la página dev de netscape ahora se ha ido ... y quién verificaría uno de Mozilla. –

+0

Esta es una forma mucho más segura en lugar de usar 'closer()' ya que una entrada puede tener una asignación de formulario propia: http://codepen.io/anon/pen/vNqEyg –

12

Para mí, esto parece el más simple/más rápido:

$('form input[type=submit]').click(function() { // attach the listener to your button 
    var yourWantedObjectIsHere = $(this.form); // use the native JS object with `this` 
}); 
+2

Para mí, usar '$ (this.form)' es la mejor solución – jap1968

Cuestiones relacionadas