Foros del Web » Programando para Internet » Javascript »

Una funcion puede funcionar en un arreglo????

Estas en el tema de Una funcion puede funcionar en un arreglo???? en el foro de Javascript en Foros del Web. Hola de nuevo no quiero duplicar mi tema... solo espero que alguien me pueda orientar hice una funcion para calcular el promedio de 3 notas ...
  #1 (permalink)  
Antiguo 29/03/2012, 13:55
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Una funcion puede funcionar en un arreglo????

Hola de nuevo no quiero duplicar mi tema... solo espero que alguien me pueda orientar hice una funcion para calcular el promedio de 3 notas

<script>
function promedio() {
var n1 = parseFloat(document.form1.p1.value);
var n2 =parseFloat(document.form1.p2.value);
var n3 = parseFloat(document.form1.p3.value);

document.form1.prom.value=((n1+n2+n3)/3).toFixed(2);

}
</script>


FUNCIONA bien solo q en mi formulario manejo arreglos por ejemplo
<input type="text" name="p1[]" id="p1" value="<?php echo $row_calificarm['parcial1']; ?>" size="3" style="border: none;background:#e6e6e6" disabled onchange="promedio()" /> </td>


entonces al tener mas de un alumno... no se calcula el promedio solo si mi lista es de un alumno... alguien me puede ayudar
  #2 (permalink)  
Antiguo 30/03/2012, 10:08
Avatar de diamari  
Fecha de Ingreso: marzo-2012
Mensajes: 95
Antigüedad: 12 años
Puntos: 30
Respuesta: Una funcion puede funcionar en un arreglo????

No veo exactamente lo que quieres pero según entiendo yo haría algo así:

Código:
<html>
<head>
<title>Ejemplo de Funciones en Arreglos</title>

<script> 
function promedio(estud) { 
	var n1 = 0;
	var n2 = 0;
	var n3 = 0;
	
	n1 = parseFloat(document.getElementById(estud + '[1]').value);
	n2 = parseFloat(document.getElementById(estud + '[2]').value);
	n3 = parseFloat(document.getElementById(estud + '[3]').value);

	document.getElementById(estud+'[4]').value=((n1+n2+n3)/3).toFixed(2);
}
</script> 
</script>
</head>
<body>
	<form id="notas">
		Estudiante 1<br>
		Nota 1<input id=est1[1] type="text" onchange="promedio('est1')"><br>
		Nota 2<input id=est1[2] type="text" onchange="promedio('est1')"><br>
		Nota 3<input id=est1[3] type="text" onchange="promedio('est1')"><br>
		Promedio<input id=est1[4] type="text"><br>
		<br>
		Estudiante 2<br>
		Nota 1<input id=est2[1] type="text" onchange="promedio('est2')"><br>
		Nota 2<input id=est2[2] type="text" onchange="promedio('est2')"><br>
		Nota 3<input id=est2[3] type="text" onchange="promedio('est2')"><br>
		Promedio<input id=est2[4] type="text"><br>
	</form>
</body>
<html>
  #3 (permalink)  
Antiguo 30/03/2012, 10:24
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Una funcion puede funcionar en un arreglo????

Gracias por responder ...

Bueno los datos para sacar el promedio los obtengo de una BD
esta es la funcion que tengo

Código:
<script> 
function promedio() { 
var n1 = parseFloat(document.form1.p1.value); 
var n2 =parseFloat(document.form1.p2.value); 
var n3 = parseFloat(document.form1.p3.value); 

document.form1.prom.value=((n1+n2+n3)/3).toFixed(2); 

} 
</script>
p1, p2, p3 y prom son mis inputs


este es mi Form

Código PHP:
 <?php do { ?>
  <tbody>
    <tr>  
  
    <td><?php  $i+=1; echo $i;?></td>
    .
    .
    .
 <td><input   type="text"  name="p1[]" id="p1" value="<?php echo $row_calificarm['parcial1']; ?>"   onchange="promedio()" />      </td>
        <td><input   type="text"  name="p2[]" id="p2" value="<?php echo $row_calificarm['parcial2']; ?>"   onchange="promedio()"/>      </td>
       
   <td><input type="text" name="p3[]" id="p3" value="<?php echo $row_calificarm['parcial3']; ?>"    onchange ="promedio()"/></td>
     
      <td><div align="center"><input type=image src="../images/Ajustes.png"  alt="editar" border="0" align="center" value="Evaluar"/></a>
      
         <td> <input type="text" name="prom[]" id="prom" size="3" style="border: none;background:#e6e6e6"   /></td> 
   
     
        </div></td>
   
    </tr>
  </tbody>
     <?php } while ($row_calificarm mysql_fetch_assoc($calificarm)); ?>

Lo que no logro es que mi script funcione en mas de un registro

solo funciona si muestro un alumno... en cuanto tengo más alumnos el script ya no calcula nada....



El numero de estudiantes no es fijo varia de acuerdo a los datos en mi BD
  #4 (permalink)  
Antiguo 01/04/2012, 06:04
Avatar de diamari  
Fecha de Ingreso: marzo-2012
Mensajes: 95
Antigüedad: 12 años
Puntos: 30
Respuesta: Una funcion puede funcionar en un arreglo????

En estos casos (para diagnosticar problemas con javascript) es mejor obviar código php para que este no interfiere. Si podría colocar un ejemplo del form con mas de un alumno sin el código php seria de mas ayuda).

Solo tienes que correr el código y hacer un view source.

Aunque mirándolo así, me parece que el problema es que no estas indicándole a tu código, cual recuadros debería esta seleccionando. Si observas mi código puedes ver que utilizo estud para indicar cual array debe trabajar y [#] para indicar cual valor dentro del array debería utilizar.

Voy aprobar unas cosas, seria mas fácil con lo que te pedí.

---------------
¡Exacto! Estas colocando todos tus inputs en un arreglo de nombre y le dices a tu javascript que simplemente lea el valor del nombre p1 (por ejemplo) y cuando existe uno lo hace pero con mas alumnos existe p1[0], p1[1], p1[2] y el no conoce cual debería seleccionar. Por lo tanto tira un error. Para arreglar el error solo tienes que indicar a tu código cuales valores debería seleccionar ya sea con un variable o otro método.

Última edición por diamari; 01/04/2012 a las 06:32 Razón: Añadir
  #5 (permalink)  
Antiguo 02/04/2012, 10:34
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Una funcion puede funcionar en un arreglo????

Cita:
Iniciado por diamari Ver Mensaje
En estos casos (para diagnosticar problemas con javascript) es mejor obviar código php para que este no interfiere. Si podría colocar un ejemplo del form con mas de un alumno sin el código php seria de mas ayuda).

Solo tienes que correr el código y hacer un view source.

Aunque mirándolo así, me parece que el problema es que no estas indicándole a tu código, cual recuadros debería esta seleccionando. Si observas mi código puedes ver que utilizo estud para indicar cual array debe trabajar y [#] para indicar cual valor dentro del array debería utilizar.

Voy aprobar unas cosas, seria mas fácil con lo que te pedí.

---------------
¡Exacto! Estas colocando todos tus inputs en un arreglo de nombre y le dices a tu javascript que simplemente lea el valor del nombre p1 (por ejemplo) y cuando existe uno lo hace pero con mas alumnos existe p1[0], p1[1], p1[2] y el no conoce cual debería seleccionar. Por lo tanto tira un error. Para arreglar el error solo tienes que indicar a tu código cuales valores debería seleccionar ya sea con un variable o otro método.

Gracias por tu respuestas... no puedo omitir mi código php, ya que atraves de una consulta a la BD obtengo el total de alumnos a evaluar (mientras do while)




en la segunda parte de lo que me mencionas
Para arreglar el error solo tienes que indicar a tu código cuales valores debería seleccionar ya sea con un variable o otro método.

la verdad no sé como tendría que hacerlo
  #6 (permalink)  
Antiguo 03/04/2012, 06:13
Avatar de diamari  
Fecha de Ingreso: marzo-2012
Mensajes: 95
Antigüedad: 12 años
Puntos: 30
Respuesta: Una funcion puede funcionar en un arreglo????

Como mencione solo necesitas correr la pagina en tu servidor y cuando le das view source lo que tienes es código html. Entonces puedes copiar y si es necesario cambiar los valores.

Ahora al problema, puedes poner tu funcion promedio a [URL="http://www.desarrolloweb.com/articulos/585.php"]recoger un variable[/URL] por ejemplo num.

Ahora se complica las cosas ya que en tu función necesitas las tres notas para hacer el promedio. Lo mas simple seria que el llamado al función te suple el primer numero de ese siglo de notas. Como los arreglos empieza desde cero:

Cita:
--0 1 2 ------- 3 4 5 ------ 6 7 8 ----- 9 10 11 ---- 12 13 14
promedio(0) | promedio(3) | promedio(6) | promedio(9) | promedio(12)
promedio(0) | promedio(3) | promedio(6) | promedio(9) | promedio(12)
promedio(0) | promedio(3) | promedio(6) | promedio(9) | promedio(12)
Entonces puedes utilizar num de la siguiente forma para calcular la nota:


n1 = document.form1.p1[num].value
n2 = document.form1.p2[num+1].value
n3 = document.form1.p3[num+2].value

Solo tendrías que utilizar php para colocar los numero en el llamado haciendo sumas de tres en tres desde 0.

Un poco complicado pero se puede. Aunque personalmente el primer método que te suplí es mas fácil. Podrías hasta obviar los números y ajustarlo desde cero ademas es mas sencilla ajustarlo por si va ver una cantidad variada de notas para cada estudiante.

Etiquetas: formulario, funcion, funcionar, input, php
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 22:51.