Foros del Web » Programando para Internet » Javascript »

Funcion con matrices

Estas en el tema de Funcion con matrices en el foro de Javascript en Foros del Web. Hola, os explico mi problema. Tengo metido todo este codigo en una funcion, a la que llamo en un formulario, que tiene 5 checkbox y ...
  #1 (permalink)  
Antiguo 03/08/2006, 09:10
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Funcion con matrices

Hola, os explico mi problema. Tengo metido todo este codigo en una funcion, a la que llamo en un formulario, que tiene 5 checkbox y 5 textbox. Lo que pretendo hacer, es que por cada checkbox activado, mire el valor que tiene su correspondiente textbox, lo almacene en una variable, y al contabilizar todos, si suman mas de 6 que salga un alert. Lo facil seria hacerlo uno por uno, pero queria hacerlo mas facil y sobretodo reestructurable con mas check y text en una matriz, por si se amplian valores en un futuro.

Yo lo he intentado asi. Primero creo una matriz llamada talentos, en la que meto el nombre de todos los textbox y otra similar para los checkbox.

Hago un for y empiezo a mirar cuales estan ckeckeados(aqui se me keda pillado) y luego unos if, para ver si los value (cantidad) en la variable acumulador, es mayor de 6.

El formulario se llama perso y creo que me falla en la parte de:

document.perso.aux.checked

pero tb he probado con document.getElementById(aux).checked

Alguien puede revisarla en un momento y decirme cual es el problema? Gracias

Código:
talentos = ['fuego','agua','aire','tierra','electricidad'];
	   talentos_check = ['fuego_check','agua_check','aire_check','tierra_check','electricidad_check'];
	   alert("aqui llego")
	   for(var j=0;j<talentos.length;j++) {
		   
		   alert("Comprobandote: "+talentos[j])
		   	var aux=talentos_check[j];
			
			alert("Comprobandote check: "+aux)
			var auxcheck= document.perso.aux.checked;
			alert("llego despues del aux")
			/*
			if (auxcheck==true) {
				var cantidad=document.getElementById(talentos[j]).value
				var acumulador+=cantidad
			}
			if(acumulador>6){
				alert("Se ve que te has pasao en poner pt en talentos")
				document.perso.fuego.focus()//Ojo! pongo el return del focus en el fuego.
       			return 0;
			}
			*/
			
		}
  #2 (permalink)  
Antiguo 04/08/2006, 02:20
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Ya he conseguido hacerla funcionar, necesitaba la funcion eval() y algunos getElementById.Dejo el codigo por si a alguien le interesa la solucion:

Código:
talentos = ['fuego','agua','aire','tierra','electricidad'];
	   talentos_check = ['fuego_check','agua_check','aire_check','tierra_check','electricidad_check']; 
	   var aux2;
	   var cantidad;
	   var acumulador=0;

	   for(var j=0;j<talentos.length;j++){//Miramos todos los ckeck activos y guardamos su valor.
		  	aux2=document.getElementById(talentos[j])//Obtengo como se llama el talento
			
			if (eval("document.perso."+talentos_check[j]+".checked") == true) {//Compruebo cuales son los ckeckbox activos
				cantidad=aux2.value//Cojo el valor del textbox
				acumulador+=parseInt(cantidad);
    			//alert("fuego es chekeado en el for con la j y cantidad "+cantidad+" acumulador "+acumulador)
   			}
		}//Fin for
		
		if(acumulador>=4){//Si no son 6 puntos exactos decimos que se ha pasado y no mandamos la ficha.
			alert("Tienes "+acumulador+" puntos en Talentos de magia y solo estan permitidos 3.")
			document.perso.fuego.focus()//Ojo! pongo el return del focus en el fuego.
       		return 0;
		}else{
			if(acumulador>0 && acumulador!=3){//Si son menos de 6 y no 6 puntos exactos decimos que le faltan y no mandamos la ficha.
				alert("Tienes "+acumulador+" puntos en Talentos de magia y deben ser 3.")
				document.perso.fuego.focus()//Ojo! pongo el return del focus en el fuego.
       			return 0;
			}
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 21:07.