2011-08-22 34 views
5

Estoy tratando de cambiar el atributo de visualización de un lapso dentro de un li usando la función find de jquery ... no está funcionando y creo que sé por qué ... porque el lapso no está dentro de el elemento de entrada ¿verdad? pero no estoy seguro de cómo solucionarloencontrando lapso dentro de este

aquí está mi código:

$('form ul li input').click(function() { 
    if ($(this).is(':checked')) 
     $(this).find('span').attr('display', 'block'); 
    else 
     $(this).find('span').attr('display', 'none'); 
}); 

sé todo lo que necesito hacer es que sea lo que busca en la LI y no ENTRADA .... pero no estoy seguro como hacer esto.

aquí está el código HTML para una li:

<li> 

    <input type="checkbox" name="attack_strategies[]" id="strategy_4" value="4" /> 
    <label for="strategy_4">meditation</label> 

    <span> 

     <select name="attack_strategies_e[]" id="strategy_e_4"> 
     <option value="">How effective was it?</option> 
     <option value="0">0</option> 
     <option value="1">1</option><option value="2">2</option> 
     <option value="3">3</option><option value="4">4</option> 
     <option value="5">5</option><option value="6">6</option> 
     <option value="7">7</option><option value="8">8</option> 
     <option value="9">9</option><option value="10">10</option>   
     </select> 

    </span> 

</li> 

Respuesta

9

Tiene usted razón. En realidad, un input element [HTML4 spec] no pueden tener hijos:

<!ELEMENT INPUT - O EMPTY    -- form control --> 

Puede utilizar closest[docs] para encontrar el ancestro li y luego buscar en la span desde allí:

$(this).closest('li').find('span').css('display', 'block'); 

Puede haber otras maneras para encontrar el span pero eso depende de tu estructura HTML, que no sabemos.

+0

pensé que funcionaría pero no lo hizo ... agregué el código HTML a mi OP si pudiera echarle un vistazo, lo apreciaría mucho. puedes ver que solo quiero mostrar el SELECCIONAR cuando la ENTRADA está marcada. – scarhand

+1

nunca lo tengo. es porque estaba usando ATTR en lugar de CSS. – scarhand

+0

@scarhand: Correcto, lo arregló también. –

0

En el código que envió, este se refieren al campo de entrada, y .find() documentación lee:

Descripción: Obtener los descendientes de cada elemento en el conjunto actual de los elementos coincidentes, filtrada por un selector, un objeto jQuery o un elemento.

Así que no puede usar find en un campo de entrada porque no puede tener span niño.

Puede usar lo que Felix Kling sugiere.