JavaScript - Problema con eventos

 
Vista:
sin imagen de perfil

Problema con eventos

Publicado por David (3 intervenciones) el 13/05/2015 20:52:00
Buenas tardes.

Ante todo quiero presentarme, puesto que es la primera vez que hago uso de este foro. Así que un placer estar por aquí, y al igual que recibir ayuda espero también poder ayudaros en otros temas.

Mi problema es el siguiente:

En un formulario que construyo dinámicamente con javascript tengo que crear los eventos asociados a algunos campos. Este formulario tiene forma de tab, pudiendo tener más o menos pestañas. La cosa es que utilizo un bucle "for" que va recorriendo las pestañas para crear estos eventos, pero solo se generan los de la última pestaña que recorre el bucle.

Pongo el código: (response lo obtengo en json de una llamada ajax previa. nservicios es el numero de pestañas, servicios es una matriz con el nombre de la pestaña y el id de esa pestaña)

1
2
3
4
5
6
7
8
9
10
11
12
13
var i;
var servicio='';
var id_servicio=0;
for(i=0;i < response.nservicios; i++) {
 
	servicio=response.servicios[0][i];
	id_servicio=response.servicios[1][i];
 
	$("#serinternet_formapago"+id_servicio).on("change", function() {
		var descripcion=$("#serinternet_formapago"+id_servicio+" option:selected").attr('content');
		$('#serinternet_formapago_des'+id_servicio).val(descripcion);
	});
}

En resumen, si se cargan 3 pestañas de un formulario solo funciona el evento "change" de la ultima pestaña.
Sé que el problema es que el evento que se crea es con el que termina valiendo id_servicio, pero no se como resolverlo.
Espero alguien me pueda ayudar, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.162
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Problema con eventos

Publicado por xve (2100 intervenciones) el 14/05/2015 07:55:37
Hola David, a simple vista, el código parece que esta bien...

Puede ser que la variable servicios tenga un solo valor? o en todos los casos tenga el mismo valor?

Has probado a mostrar el contenido de dicha variable?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con eventos

Publicado por David (3 intervenciones) el 14/05/2015 09:50:49
Hola xve, y gracias por contestar.

Si he probado con alert para qué me muestre los valores de servicio y id_servicio y se pasan correctamente.
Tambien he probado a meter un alert entre las sentencias que ejecuta el evento y el evento se dispara en todos los campos en los que se asocia, pero me sale siempre en el alert el último valor de id_servicio que recorre el bucle, por lo que el resto del contenido no se ejecuta salvo en el último caso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 95
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Problema con eventos

Publicado por Vainas (258 intervenciones) el 14/05/2015 11:07:13
Buenas:

El problema que tienes se llama closures.

Tu piensas que cuando haces el for estas llamando a la funcion onchange y pasandole los valores id_servicio y servicio pero no es asi. Asignas a cada etiqueta el evento onchange y le dices que cuando sea llamado (por q el usuario cambio algo en la etiqueta) que recoja el valor que tiene almacenado id_servicio y servicio, el cual es el ultimo valor del for.

Como se suele solucionar esto? pues usa this por ejemplo

Puedes hacer lo siguiente (y asi te evitas el for):

1. A todas las etiquetas que le asignas el onchange ponle una clase (esto no solo tiene que valer para css sino para esto tambien)y luego puedes hacer algo asi:


1
2
3
4
$(".clasexxxx").on("change", function() {
		var descripcion = $("option:selected", this).attr('content');
                $(this)..val(descripcion);
});


Espero que te sirva. busca en google sobre que es closures y seguro que hay alguien que lo explique mejor que yo

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Problema con eventos

Publicado por David (3 intervenciones) el 14/05/2015 15:15:17
Muchas gracias Vainas, me ha servido de mucho.
Ya me informé sobre los closures y he encontrado solución . Muchas gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.162
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Problema con eventos

Publicado por xve (2100 intervenciones) el 14/05/2015 21:42:47
Excelente Vainas!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar