Foros del Web » Programando para Internet » Javascript »

Buscar elemento con $(this)

Estas en el tema de Buscar elemento con $(this) en el foro de Javascript en Foros del Web. Hola, estoy haciendo empezando con Javascript utilizando el framework de jQuery así que mis conocimientos son bastante bajos. He creado una pagina que me previsualiza ...
  #1 (permalink)  
Antiguo 09/03/2012, 03:31
Avatar de Ventru3  
Fecha de Ingreso: noviembre-2010
Ubicación: Disneylandia
Mensajes: 86
Antigüedad: 13 años, 5 meses
Puntos: 13
Buscar elemento con $(this)

Hola, estoy haciendo empezando con Javascript utilizando el framework de jQuery así que mis conocimientos son bastante bajos.

He creado una pagina que me previsualiza el texto y me cambia el color del texto sleccionandolo en un input (tipo radio). Hasta hay todo perfecto, ahora quiero que cuando haga click en un input, el input seleccionado anterior pierda su estilo (esta parte también me va) y lo coja el input al cual he hecho click.

El codigo de esa parte lo tengo asi:
Código Javascript:
Ver original
  1. $('#colors input').click(
  2.     function(){
  3.         $('span').removeClass('selected');
  4.         $(this).has('span').addClass('selected');
  5. });

El $(this) me devuelve el input en el que he hecho click, pero no consigo que me añada el estilo al otro span porque no se que sintaxis utilizar para ello.
  #2 (permalink)  
Antiguo 09/03/2012, 04:04
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Buscar elemento con $(this)

Código Javascript:
Ver original
  1. $(this).find('span').addClass('selected');
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 09/03/2012, 04:15
Avatar de Ventru3  
Fecha de Ingreso: noviembre-2010
Ubicación: Disneylandia
Mensajes: 86
Antigüedad: 13 años, 5 meses
Puntos: 13
Respuesta: Buscar elemento con $(this)

Gracias por la respuesta, pero también probé con el find, pero el resultado es el mismo. Quita el estilo, pero no lo añade.

Dejo la estructura del HTML de esa parte en concreto a ver si eso ayuda a concretar mas.

Código HTML:
Ver original
  1. <section id="colors">
  2.     <input id="black" type="radio" name="color" />
  3.         <label for="black"><span class="black selected">&nbsp;</span></label>
  4.     <input id="orange" type="radio" name="color" />
  5.         <label for="orange"><span class="orange">&nbsp;</span></label>
  6.     <input id="blue" type="radio" name="color" />
  7.         <label for="blue"><span class="blue">&nbsp;</span></label>
  8.     <input id="white" type="radio" name="color" />
  9.         <label for="white"><span class="white">&nbsp;</span></label>

Al hacer click en un input (realmente el click es al label que contiene un span con el color porque los inputs estan ocultos) me devuelve el valor del input. Por ejemplo en el caso de hacer click en el span naranja, $(this) me devuelve <input id="orange" type="radio" name="color" />.

Última edición por Ventru3; 09/03/2012 a las 04:24
  #4 (permalink)  
Antiguo 09/03/2012, 04:24
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Buscar elemento con $(this)

es que el span no esta dentro del input, por lo tanto no te va a encontrar nada:

Código Javascript:
Ver original
  1. $(this).next().next().addClass('selected');
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #5 (permalink)  
Antiguo 09/03/2012, 04:28
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Buscar elemento con $(this)

a ver si se puede así:

Código Javascript:
Ver original
  1. $(this).next('span').addClass('selected');
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #6 (permalink)  
Antiguo 09/03/2012, 04:49
Avatar de Ventru3  
Fecha de Ingreso: noviembre-2010
Ubicación: Disneylandia
Mensajes: 86
Antigüedad: 13 años, 5 meses
Puntos: 13
Respuesta: Buscar elemento con $(this)

Pues la sintaxis la veo correcta, debería de funcionar perfectamente pues le dices que el siguiente elemento span de ese input le añada la clase selected, el caso es que no lo hace.

Me aproximo con esto

Código Javascript:
Ver original
  1. $(this, 'span').parent().addClass('selected');

El problema es que me añade la clase a todos, a ver si puedo especificar mas con parent().
  #7 (permalink)  
Antiguo 09/03/2012, 04:53
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Respuesta: Buscar elemento con $(this)

pues no lo es, mira:

Código HTML:
Ver original
  1. <input id="black" type="radio" name="color" /> <!-- CIERRA -->
  2.         <label for="black"><span class="black selected">&nbsp;</span></label>

por lo tanto NO ESTA DENTRO DEL INPUT, por lo tanto no puede encontrar nada dentro:

prueba con esto:
Código Javascript:
Ver original
  1. $(this).next().find('span').addClass('selected');
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #8 (permalink)  
Antiguo 09/03/2012, 04:56
Avatar de Shirak2  
Fecha de Ingreso: abril-2008
Ubicación: Granada
Mensajes: 42
Antigüedad: 16 años
Puntos: 19
Respuesta: Buscar elemento con $(this)

No te sería más sencillo hacer algo tipo:

Código Javascript:
Ver original
  1. $('#colors input').click(function() {
  2.     var color = $(this).attr('id'); // orange
  3.  
  4.     $('#colors').find('span.' + color).addClass('selected');
  5. });
  #9 (permalink)  
Antiguo 09/03/2012, 04:59
Avatar de Ventru3  
Fecha de Ingreso: noviembre-2010
Ubicación: Disneylandia
Mensajes: 86
Antigüedad: 13 años, 5 meses
Puntos: 13
Respuesta: Buscar elemento con $(this)

Si, ahora si.

Con solo $(this).next() me devolvía la etiqueta label con el span dentro, con dos next() me devolvía el siguiente input.

Ahora si me devuelve el valor del siguiente span.

Gracias por la ayuda, esto me a servido para aprender a buscar en los $(this).

En respuesta al código que me has puesto Shirak, son mas caracteres para hacer casi la misma función (falta añadir que elimine la clase del span/color seleccionado anteriormente). Pero me sirve para ver como recojes el valor de la id y los pasas como clase al span dinámica mente por color.

Última edición por Ventru3; 09/03/2012 a las 05:20
  #10 (permalink)  
Antiguo 09/03/2012, 13:25
Avatar de Ventru3  
Fecha de Ingreso: noviembre-2010
Ubicación: Disneylandia
Mensajes: 86
Antigüedad: 13 años, 5 meses
Puntos: 13
Respuesta: Buscar elemento con $(this)

Dejo el script completo y comentado, por si le es de ayuda a alguien.

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     //Previsualizar texto, caracteres restantes y cambio de color
  3.     $('#name').keyup(
  4.         function(){
  5.             var name = $(this).val(); //Valor del input
  6.             var count = name.length; //Numero de caracteres escritos
  7.             var max = parseInt($(this).attr('maxlength')); //Valor maximo del input
  8.             var countdown = max - count; //Resta eñ valor maximo del input al numero de caracteres escritos
  9.                        
  10.             if (countdown > 6){ //Si quedan más de seis caracteres cambia de color
  11.                 $('#missing').css({color:'#2e2e2e'});
  12.             }
  13.                        
  14.             if (countdown < 7){ //Si quedan menos de siete caracteres cambia de color
  15.                 $('#missing').css({color:'#f4fa58'});
  16.             }
  17.                        
  18.             if (countdown < 4){ //Si quedan menos de cuatro caracteres cambia de color
  19.                 $('#missing').css({color:'#fe2e2e'});
  20.             }
  21.                                        
  22.             $('#result').html(name); //Muestra el valor del input en #result
  23.             $('#count').html(countdown); //Muestra los caracteres restantes
  24.             });
  25.         //Cambiar color del texto previsualizado
  26.         $('#black').click(
  27.             function(){
  28.                 $('#result').css({color:'#000000'});
  29.             });
  30.         $('#orange').click(
  31.             function(){
  32.                 $('#result').css({color:'#f68e56'});
  33.             });
  34.         $('#blue').click(
  35.             function(){
  36.                 $('#result').css({color:'#6dcff6'});
  37.             });
  38.             $('#white').click(
  39.                 function(){
  40.                     $('#result').css({color:'#ffffff'});
  41.                 });
  42.         //Color seleccionado
  43.         $('#colors input').click(
  44.             function(){
  45.                 $('span').removeClass('selected'); //Quita la clase selected a todos los span
  46.                 $(this).next().find('span').addClass('selected'); //Agrega la clase selected al color seleccionado
  47.             });
  48. });

Si alguien ve que se puede simplificar el script, agradecería que lo dijera.

Etiquetas: input
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 23:39.