Foros del Web » Programando para Internet » Jquery »

jQuery | Etiqueta "label" como indicador de "radio button"

Estas en el tema de jQuery | Etiqueta "label" como indicador de "radio button" en el foro de Jquery en Foros del Web. Tengo una pantalla con una simple elección mediante un grupo de radio buttons. Para mejorar la interfáz, intento utilizar el <label> como "botón" y ocultar ...
  #1 (permalink)  
Antiguo 10/02/2009, 14:07
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
jQuery | Etiqueta "label" como indicador de "radio button"

Tengo una pantalla con una simple elección mediante un grupo de radio buttons. Para mejorar la interfáz, intento utilizar el <label> como "botón" y ocultar el radio. Hasta ahí bien, pero no se cuál sea la mejor manera de cambiar el estilo del label (en realidad es un span) para indicar que el "radio" asociado a él está marcado.

Para aclarar, tengo el formulario declarado como sigue:
Código html:
Ver original
  1. <fieldset id="tipoConsulta">
  2.       <legend>Tipo de consulta:</legend>
  3.    
  4.       <label for="tipoUno" class=""><span class="opcion">Uno</span>
  5.         <input type="radio" name="tipoConsulta" id="tipoUno" value="uno" class="oculto" />
  6.       </label>
  7.       <label for="tipoDos" class=""><span class="opcion">Dos</span>
  8.         <input type="radio" name="tipoConsulta" id="tipoDos" value="dos" class="oculto" />
  9.       </label>
  10.       <label for="tipoTres" class=""><span class="opcion">Tres</span>
  11.         <input type="radio" name="tipoConsulta" id="tipoTres" value="tres" class="oculto" />
  12.       </label>
  13.     </fieldset>

Que, visualmente queda algo como:




El "UNO" se ve diferente porque tiene el ratón sobre él. La idea es darle click a una opción y cambiarle la clase para marcarlo visualmente como seleccionado, sin cambiar el comportamiento natural del formulario (en realidad se está marcando un radio).

Entonces, ¿por dónde tomar el asunto?, ¿alguna sugerencia/ejemplo?. Cabe mencionar que es probable desde un inicio el radio esté seleccionado e igual habría que indicarlo.

Gracias de antemano
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #2 (permalink)  
Antiguo 10/02/2009, 15:21
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
Respuesta: jQuery | Etiqueta "label" como indicador de "radio button"

... ok, después de pensarlo un rato, veo que me estaba complicando con que sean radio buttons ... pudiendo manejar el evento como un click a las etiquetas.

Es entonces, que tengo esto como "solución":
Código javascript:
Ver original
  1. $(document).ready(function() {
  2.     var tipoConsulta = $('#tipoConsulta > label > span');
  3.        
  4.     tipoConsulta.click(function() {
  5.         tipoConsulta.each(function() {
  6.             $(this).attr('class', 'opcion');
  7.         });
  8.  
  9.         $(this).attr('class', 'seleccion');
  10.     });
  11. });

¿comentarios, correcciones, críticas, alternativas?; me supóngo hay otro método para cambiar la clase, ¿no?

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 10/02/2009 a las 20:25
  #3 (permalink)  
Antiguo 11/02/2009, 15:18
Avatar de foreverOdd  
Fecha de Ingreso: noviembre-2007
Ubicación: Caracas
Mensajes: 489
Antigüedad: 17 años
Puntos: 14
Respuesta: jQuery | Etiqueta "label" como indicador de "radio button"

Hola, espero que esto te sirva.

$(document).ready(function() {

var tipoConsulta = $('#tipoConsulta > label > span');



tipoConsulta.click(function() {

tipoConsulta.each(function() {

$(this).addClass("rojo");

});
$(this).removeClass("rojo").addClass("azul");
}
)})
</script>
<style>

.azul{ color:blue}
.rojo{ color:red}

</style>

Saludos
__________________
My path is lit by my own fire, I only go where I desire
  #4 (permalink)  
Antiguo 11/02/2009, 15:26
Avatar de foreverOdd  
Fecha de Ingreso: noviembre-2007
Ubicación: Caracas
Mensajes: 489
Antigüedad: 17 años
Puntos: 14
Respuesta: jQuery | Etiqueta "label" como indicador de "radio button"

Optimizando:

Código javascript:
Ver original
  1. <script type="text/javascript">
  2.  
  3. $(document).ready(function() {
  4.     var tipoConsulta = $('#tipoConsulta > label > span');
  5.     tipoConsulta.click(function() {
  6.         tipoConsulta.addClass("rojo");
  7.     $(this).removeClass("rojo").addClass("azul");
  8. }
  9. )})
  10. </script>
__________________
My path is lit by my own fire, I only go where I desire
  #5 (permalink)  
Antiguo 12/02/2009, 17:43
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
Respuesta: jQuery | Etiqueta "label" como indicador de "radio button"

Gracias por el código. En mi caso, no me sirve addClass(), pues lo que hace es "adjuntar" la clase sin remover las propiedades que la clase anterior había colocado. Sin embargo, gracias a tu aporte puedo reducir código

Código javascript:
Ver original
  1. $(document).ready(function() {
  2.     var tipoConsulta = $('#tipoConsulta > label > span');
  3.        
  4.     tipoConsulta.click(function() {
  5.         tipoConsulta.attr('class', 'opcion');
  6.         $(this).removeClass('opcion').addClass('seleccion');
  7.     });
  8. });

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 13/02/2009, 12:20
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
Respuesta: jQuery | Etiqueta "label" como indicador de "radio button"

Bueno, en un rato de curiosidad logré hacerlo desde el radio button, básicamente el evento onChange al grupo y para tomar el seleccionado con el selector :checked

Código javascript:
Ver original
  1. $(document).ready(function() {
  2.     $('input[name=tipoConsulta]').change(function() {
  3.         var seleccion = $('input[name=tipoConsulta]:checked');
  4.        
  5.         $('#tipoConsulta > label > span').attr('class', 'opcion');
  6.         seleccion.prev().removeClass('opcion').addClass('seleccion);
  7.    });
  8. });

De esta manera me agradó más pues puedo hacer varias cosas (como tomar el value y el texto de la etiqueta) partiendo desde la opción seleccionada, lo que reduce el margen de error.

Ojalá a alguien le sirva ...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #7 (permalink)  
Antiguo 10/03/2009, 10:30
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
Respuesta: jQuery | Etiqueta "label" como indicador de "radio button"

Nota: He visto esto no sirve en IExplorer (clásico), pues el evento "onChange" es lanzado cuando se da click en otra parte fuera de las etiquetas. Además, parece no asigna los valores a los radios cuando estos están ocultos ...

Ahí como información.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:37.