Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/04/2015, 12:10
luisceb
 
Fecha de Ingreso: abril-2015
Mensajes: 24
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Multiplicar por un checkbox

Hola.

Me he tomado la molestia de cargar el código en FrontPage, en su versión 2003. En mi opinión el mejor editor HTML para trabajar con JavaScript.

El problema del área viene de algunos errores de la función
calcularMultiplicacion(ancho, alto, area)

Para empezar la coma que había delante del argumento "area" te la estaba jugando y generaba un error.

Para seguir, los nombres de las variables no pueden ser los mismos que los nombre de los campos. Me refiero a alto y ancho.

Por otra parte, si él formulario está bajo la etiqueta <form> debes de argumentarlo con el nombre del formulario. Pongamos por caso que le llamas name=f1. De otra forma JavaScript no los podrá identificar.

Entonces las líneas de código deberían ser

ancho1=f1.ancho.value;
alto1=f1.alto. value;

Observa que los nombres de las variables tienen un "1" al final ya que no pueden tener el mismo que el de los campos.

Obviamente en la línea del resultado.innerHTML deberás cambiar el nombre de las variables, de ancho y alto, a ancho1 y alto1.

La función quedaría resuelta de esta forma


function calcularMultiplicacion(ancho, alto, area)
{
casilla1=document.getElementById( ancho1 );
ancho1 = eval(f1.ancho.value);
casilla2=document.getElementById( alto1 );
alto1 = eval(f1.alto.value);
resultado=document.getElementById( area );
resultado.innerHTML = "Area: " +(parseInt(ancho1)*parseInt(alto1));
resultado.style.color = "blue";

total1=total1*(parseInt(ancho1)*parseInt(alto1))
f1.total.value=total1;
}

Las dos últimas líneas multiplican el área y el resultado aritmético del resto de parámetros (tipo vidrio, transporte, etc....)

En mi opinión las líneas casilla1 y casilla2 son innecesarias.

He fundido los dos formularios en uno solo bajo el nombre f1.

La variable total coincide con el valor de campo total, luego habría que renombrar la variable o el campo. En este caso renombré la variable al nombre total1.

Con las modificaciones realizadas ya obtienes el valor del área y se suma al del tipo de vidrio, junto a la instalación y transporte.

Dejo colgado él formulario en la siguiente dirección:

http://casinosoft.esy.es/casino-casinosoft/calculo.htm

Observarás que la aplicación está operativa.

Por último, la variable total1 (antes total) la he dejado fuera de la función para que su valor de inicio no influya en el resto de operaciones. Esto es, tenga un carácter meramente declarativa.

Código Javascript:
Ver original
  1. <html>
  2.  
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
  5. <title>Pagina nueva 1</title>
  6. </head>
  7.  
  8.  
  9. <script language=javascript>
  10.  total1=0;
  11.  function Suma(formulario){
  12.  
  13.  nombre="";
  14.  for(i=0;i<formulario.elements.length;i++){
  15.  if(formulario.elements[i].type=="radio" && nombre!=formulario.elements[i].name){
  16.  nombre=formulario.elements[i].name;
  17.  grupo=document.getElementsByName(nombre);
  18.  for(j=0;j<grupo.length;j++){
  19.  if(grupo[j].checked){
  20.  total1+=parseInt(grupo[j].value);
  21.  }
  22.  }
  23.  }else if (formulario.elements[i].type=="checkbox"){
  24.  if(formulario.elements[i].checked){
  25.  total1+=parseInt(formulario.elements[i].value);
  26.  }
  27.  }
  28.  }
  29.  document.f1.total.value = total1;
  30.  }
  31.  </script>
  32.  
  33.  <script>
  34.  function calcularMultiplicacion(ancho1, alto1, area)
  35.  {
  36. casilla1=document.getElementById( ancho1 );
  37.  ancho1 = eval(f1.ancho.value);
  38.  casilla2=document.getElementById( alto1 );
  39.  alto1 = eval(f1.alto.value);
  40.  resultado=document.getElementById( area );
  41.  resultado.innerHTML = "Area: " +(parseInt(ancho1)*parseInt(alto1));
  42.  resultado.style.color = "blue";
  43.  
  44.  total1=total1*(parseInt(ancho1)*parseInt(alto1))
  45.  f1.total.value=total1;
  46.  
  47.  }
  48.  </script>
  49. <body > <form method="post" name="f1">
  50.  <table BORDER=7 align="center">
  51.  <tr>
  52.  <th colspan="6"> <div align="center">FORMULARIO DE PEDIDO </div></th>
  53.  </tr>
  54.  <tr>
  55.  <th>contacto</th>
  56.  <th> <input type="text" name="contacto" id="contacto" /></th>
  57.  <th>tel fijo</th>
  58.  <th><input type="text" name="tel fijo" id="tel fijo" /></th>
  59.  <th>tel movil</th>
  60.  <th><input type="text" name="tel movil" id="tel movil" /></th>
  61.  </tr>
  62.  <tr>
  63.  <td>direccion</td>
  64.  <td><input type="text" name="direccion" id="direccion" /></td>
  65.  <td>ciudad</td>
  66.  <td> <input type="text" name="ciudad" id="ciudad" /></td>
  67.  <td>barrio</td>
  68.  <td> <input type="text" name="barrio" id="barrio" /></td>
  69.  </tr>
  70.  <tr>
  71.  <td>email</td>
  72.  <td><input type="text" name="email" id="email" /></td>
  73.  <td>forma de pago</td>
  74.  <td> <input type="text" name="forma de pago" id="forma de pago" /></td>
  75.  </tr>
  76.  
  77.  <tr>
  78.  
  79.  <TD>ancho</TD> <td><input type="text" name="ancho" id="ancho" /></td>
  80.  <TD>alto</TD><td><input type="text" name="alto" id="alto" /></td>
  81.  <td><p id="area">Area: </p></td>
  82.  <td><button type="button"
  83.  onclick="calcularMultiplicacion('ancho', 'alto', 'area')">
  84.  Calcular area</button></td>
  85.  
  86.  </tr>
  87.  
  88.  <tr>
  89.  
  90.  
  91.  <td colspan="3">
  92.  <p>Selecione su tipo de vidrio</p>
  93.  
  94.  <p>&nbsp;&nbsp; &nbsp; Vidrio incoloro 5 mm <input name="grupo_radio" id="radio_1" onclick="Suma(this.form)" type="radio" value="100" /></p>
  95.  
  96.  <p>&nbsp;&nbsp; &nbsp; Vidrio incoloro 6 mm<input name="grupo_radio" id="radio_2" onclick="Suma(this.form)" type="radio" value="50" /></p>
  97.  
  98.  <p>&nbsp;&nbsp; &nbsp; Vidrio incoloro 8 mm <input name="grupo_radio" id="radio_3" onclick="Suma(this.form)" type="radio" value="100" /></p>
  99.  
  100.  <p>&nbsp;&nbsp; &nbsp; Vidrio incoloro 10 mm<input name="grupo_radio" id="radio_4" onclick="Suma(this.form)" type="radio" value="50" /></p>
  101.  </td>
  102.  
  103.  <td colspan="3">
  104.  <p>Seleccione los accesorios</p>
  105.  
  106.  <p>&nbsp;&nbsp; &nbsp; Batiente I<input name="grupo_radio2" id="radio_3" onclick="Suma(this.form)" type="radio" value="300" /></p>
  107.  
  108.  <p>&nbsp;&nbsp; &nbsp; Batiente II<input name="grupo_radio2" id="radio_4" onclick="Suma(this.form)" type="radio" value="25" /></p>
  109.  
  110.  <p>&nbsp;&nbsp; &nbsp; Corredera I<input name="grupo_radio2" id="radio_5" onclick="Suma(this.form)" type="radio" value="300" /></p>
  111.  
  112.  <p>&nbsp;&nbsp; &nbsp; Corredera II<input name="grupo_radio2" id="radio_6" onclick="Suma(this.form)" type="radio" value="25" /></p>
  113.  
  114.  <p>&nbsp;&nbsp; &nbsp; Corredera III<input name="grupo_radio2" id="radio_7" onclick="Suma(this.form)" type="radio" value="300" /></p>
  115.  
  116.  <p>&nbsp;&nbsp; &nbsp; Corredera IV<input name="grupo_radio2" id="radio_8" onclick="Suma(this.form)" type="radio" value="25" /></p>
  117.  
  118.  <p>&nbsp;&nbsp; &nbsp; Corredera V<input name="grupo_radio2" id="radio_9" onclick="Suma(this.form)" type="radio" value="25" /></p>
  119.  </td>
  120.  <tr>
  121.  <td colspan="3">
  122.  <p>Require Instalacion</p>
  123.  
  124.  <p>&nbsp;&nbsp; &nbsp; Instalacion<input name="grupo_radio3" id="radio_10" onclick="Suma(this.form)" type="radio" value="300" /></p>
  125.  </td>
  126.  <td colspan="3">
  127.  <p>Require Transporte</p>
  128.  
  129.  <p>&nbsp;&nbsp; &nbsp; Transporte<input name="grupo_radio4" id="radio_11" onclick="Suma(this.form)" type="radio" value="300" /></p>
  130.  </td>
  131.  </tr>
  132.  <tr>
  133.  <th colspan="6" >
  134.  <p>
  135.  &nbsp;</p>
  136.  <p>
  137.  Total<input name="total" type="text" value="0" /></p>
  138.  </th></tr>
  139.  </form>
  140.  </tr>
  141. </body>
  142.  
  143. </html>

Última edición por luisceb; 12/04/2015 a las 12:21