2011-12-28 15 views
11

tengo el siguiente marcado:Obtener valor de entrada más cercano de elemento se hace clic con jQuery

<div class="options"> 
    <div class="quantity"> 
    <label>Qty:</label> 
    <input type="text" name="quantity" value="1"/> 
    </div> 
    <div class="buttons"> 
    <a href="#" class="add">Add Item</a> 
    </div> 
</div> 

tengo un evento de clic binded a la clase de 'añadir' usando jQuery. Cuando hago clic en eso, me gustaría obtener el valor de name = "cantidad", pero hay varios lugares donde se hace clic en 'agregar' y varios campos de cantidad.

Estoy tratando de obtener el valor de entrada 'más cercano'. Intenté usar 'más cercano' y 'findall', pero no tuve suerte.

¿Alguna idea de cómo puedo obtener esto usando jQuery? ¡Gracias!

+1

nunca he oído hablar de un método jQuery 'findAll'. Le sugiero que vaya a través de los [métodos transversales] (http://api.jquery.com/category/traversing/) y eche un vistazo a ellos. 'más cercano' ya es un buen comienzo. Por favor, publique el código que tiene hasta ahora. –

Respuesta

26
$(".add").on("click", function() { 
    var val = $(this).closest("div.options").find("input[name='quantity']").val(); 
}); 

La estrategia aquí es:

  • Uso closest para encontrar el ancestro más cercano que coincida con el selector dado (en este caso un div con la clase option)
  • A continuación, utilice find para encontrar el input con el dado name usando el attribute equals selector.
  • Finalmente, use val para recuperar el valor de input.
3

Debe usar closest para encontrar el elemento de encerramiento apropiado y luego trabajar desde allí.

$(link).closest(".options").find("input[name=quantity]") 
0
$(this).parent().parent().find("input[name=quantity]").val() 

Esto debería hacer el truco

+1

Eso no funcionará. '$ (this) .parent()' será 'div.buttons'. –

+0

Bueno, me doy cuenta que aún así sugeriría utilizar la respuesta más cercana, pero editada, mi respuesta de cualquier forma para la corrección –

0

supongo obras más cercanos única con elementos del mismo nivel. así que ...

¿Por qué no poner el id en el campo de entrada y seleccionar por $('#input-id')?

O recorrer hasta las opciones de clase y encontrar la entrada en ese país: $(this).parents('.options:first').find('input');

+0

'closer' encuentra el ancestro más cercano en el DOM que coincide con el selector. 'parents' encuentra que todos los antepasados ​​coinciden con el selector. –

+0

Acabo de reparar eso, addad: primero. ¿Entonces las obras más cercanas buscan dom upwards? Más inteligente de nuevo ... :) – Kristian

Cuestiones relacionadas