Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Manejar números en el argumento de una funcion

Estas en el tema de Manejar números en el argumento de una funcion en el foro de Javascript en Foros del Web. Hola... Quisiera ver si me pueden orientar para identificar mi error. Tengo un documento html en los cuales estan contenidos algunos checkbox. Necesito crear una ...
  #1 (permalink)  
Antiguo 02/11/2012, 19:40
 
Fecha de Ingreso: noviembre-2010
Mensajes: 13
Antigüedad: 13 años, 5 meses
Puntos: 3
Pregunta Manejar números en el argumento de una funcion

Hola...

Quisiera ver si me pueden orientar para identificar mi error.

Tengo un documento html en los cuales estan contenidos algunos checkbox. Necesito crear una función que cada que se seleccione o des-seleccione otra función "lea" ese evento y aumente o disminuya un valor. Y este valor sea automáticamente mostrado en pantalla, cuando aumente o disminuya para saber cuanto tiene en total.

Sin embargo al parecer tengo un problema en el javascript, además de que no se como hacer que si es des-seleccionado no se aumente de nuevo el número debido.


Este es mi fragmento de HTML:
Código HTML:
Ver original
  1.   <HEAD>
  2.   </HEAD>
  3.   <BODY>
  4.     <FORM name="form1">
  5.     <TABLE>
  6.       <TR>
  7.         <TD>
  8.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(45);" name="check_1">Si es seleccionado debe aumentar 45%<br>
  9.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(45);" name="check_2">Si es seleccionado debe aumentar 45%<br>
  10.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(30);" name="check_3">Si es seleccionado debe aumentar 30%<br>
  11.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(20);" name="check_4">Si es seleccionado debe aumentar 20%<br>
  12.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(20);" name="check_5">Si es seleccionado debe aumentar 20%<br>
  13.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(15);" name="check_6">Si es seleccionado debe aumentar 15%<br>
  14.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(15);" name="check_7">Si es seleccionado debe aumentar 15%<br>
  15.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(10);" name="check_8">Si es seleccionado debe aumentar 10%<br>
  16.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(10);" name="check_9">Si es seleccionado debe aumentar 10%<br>
  17.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(10);" name="check_10">Si es seleccionado debe aumentar 10%<br>
  18.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(10);" name="check_11">Si es seleccionado debe aumentar 10%<br>
  19.           <INPUT TYPE="checkbox" value="0" onclick="aumentar(10);" name="check_12">Si es seleccionado debe aumentar 10%<br>
  20.         </TD>
  21.         <TD>
  22.           <div id="sumamulti"></div>% total.
  23.           /*Aquí debería ir la suma total dentro del DIV*/
  24.         </TD>
  25.       </TR>
  26.     </TABLE>
  27.     </FORM>
  28.   </BODY>
  29. </HTML>

Y acá está lo que debería ser mi JavaScript, sin embargo es obvio que tengo algún error >.<
Código Javascript:
Ver original
  1. function aumentar(j) {
  2.   var sigma = 0;
  3.   sigma += j;
  4.   document.getElementById('sumamulti').innerHTML = Sigma;  
  5. }

En fin, ojalá me puedan ayudar porque me he quebrado un poco la cabeza sin obtener éxito alguno. :(

De ante mano muchas gracias por el tiempo.
  #2 (permalink)  
Antiguo 02/11/2012, 19:50
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Manejar números en el argumento de una funcion

Para saber si está seleccionado o no, tenés que utilizar la propiedad checked.
Además javascript es "case sensitive", distingue mayúsculas de minúsculas
sigma no es Sigma

Y tu enunciado es bastante impreciso

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 02/11/2012, 20:19
 
Fecha de Ingreso: noviembre-2010
Mensajes: 13
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: Manejar números en el argumento de una funcion

Bueno, lamento mucho si no me supe expresar.

Sin embargo, sigo con el problema. Ya corregí el pequeño inconveniente de las mayúsculas, pero aunque agradezco hacermelo ver aún no puedo crear la función debida.

Acabo de añadirles un Id a todos los checkbox, pero no se como llamar el atributo checked.
He tratado de crear la función primero con un solo checkbox (cuyo ID es "aumenta_45") y me ha quedado así:

Código Javascript:
Ver original
  1. function aumentar() {
  2.                 var sigma = 0;
  3.                 if (document.getElementById('aumenta_45').checked == true) {sigma += 45};
  4.                 document.getElementById('sumamulti').innerHTML = sigma;
  5.             }

Sin embargo es obvio que estoy mal, ya que no me va >.<
  #4 (permalink)  
Antiguo 02/11/2012, 21:12
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Manejar números en el argumento de una funcion

Repito, tenés que aclarar tu enunciado, porque es completamente confuso,
Cita:
una función que cada que se seleccione o des-seleccione otra función
la función no se selecciona, se ejecuta en respuesta a un evento...
otra función, ni siquiera hay dos funciones.

Aventurando un poco supongo, y solo supongo que querés hacer esto
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN"
  2. "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
  5. <title>suma</title>
  6. <script type="text/javascript">
  7. //<![CDATA[
  8. function sumar(){
  9. var total=0;
  10. for (i=0;i<document.formulario.elements.length;i++){
  11. if(document.formulario.elements[i].checked){
  12. total+=parseInt(document.formulario.elements[i].value);
  13. }
  14. }
  15. document.getElementById('total').innerHTML =total;
  16. }
  17. //]]>
  18. </head>
  19. <div>
  20. <form name="formulario" action="#">
  21. 1 <input type="checkbox" name="x" value="1" onclick="sumar()" />
  22. 2 <input type="checkbox" name="x" value="2" onclick="sumar()" />
  23. 3 <input type="checkbox" name="x" value="3" onclick="sumar()" />
  24. </form>
  25. <div id="total"></div>
  26. </div>
  27. </body>
  28. </html>

Pero. como lo señalo constantemente, este es un foro escrito, y hay que esmerarse en presentar los problemas
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 02/11/2012, 21:37
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 9 meses
Puntos: 103
Respuesta: Manejar números en el argumento de una funcion

Bueno, primero que nada, los inputs deben ser asi :
Cita:
<INPUT TYPE="checkbox" value="0" onclick="aumentar(45,this);" name="check_1" />
fijate que cierran con /> , por que no tienen etiqueta de cierre, luego en vez de usar onclick use onchange ( representa "en cambio de estado" ) , tercero, a la función le agrege una variable de entrada ( this ) osea el elemento.

el JS es el siguiente

Código Javascript:
Ver original
  1. var total=0; // variable global
  2. function aumentar(valor,elemento){
  3.     if (elemento.checked)total+=valor //si el elemento fue marcado, agregar el valor
  4.     else total-=valor //en caso contrario, quitarlo
  5.     }

Un saludo, y espero que hayas entendido, el problema principal que tenias, es que el onclick sale siempre, no importa si lo marcas o lo desmarcas.
  #6 (permalink)  
Antiguo 02/11/2012, 21:43
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 9 meses
Puntos: 103
Respuesta: Manejar números en el argumento de una funcion

Disculpa me falto agregarle a la función
Código Javascript:
Ver original
  1. var total=0; // variable global
  2. function aumentar(valor,elemento){
  3. * * if (elemento.checked)total+=valor //si el elemento fue marcado, agregar el valor
  4. * * else total-=valor //en caso contrario, quitarlo
  5.     document.getElementById('sumamulti').innerHTML = total; //eso XD
  6. * * }

la ultima linea para que se actualice
  #7 (permalink)  
Antiguo 02/11/2012, 23:25
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Manejar números en el argumento de una funcion

Hola:

Cita:
Iniciado por chwc Ver Mensaje
Bueno, primero que nada, los inputs deben ser asi :
fijate que cierran con /> , por que no tienen etiqueta de cierre...
Eso depende del tipo de doctype de la página... tu afirmación es correcta en xhtml, pero sin esa x (html) no hay obligatoriedad... (es más, creo que no valida...)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 03/11/2012, 01:14
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 9 meses
Puntos: 103
Respuesta: Manejar números en el argumento de una funcion

Cita:
Iniciado por caricatos Ver Mensaje
Hola:



Eso depende del tipo de doctype de la página... tu afirmación es correcta en xhtml, pero sin esa x (html) no hay obligatoriedad... (es más, creo que no valida...)

Saludos
A si lo pense despues de escribir el post por que en HTML5 no hay nescesidad, pero si valida correctamente eso si, es lo mismo
un saludo Caricatos !!
  #9 (permalink)  
Antiguo 04/11/2012, 01:32
 
Fecha de Ingreso: noviembre-2010
Mensajes: 13
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: Manejar números en el argumento de una funcion

¡Mil gracias!

Muchas gracias a ambos, emprear y chwc. Ambos me ofrecieron solución al mismo problema, a pesar de no haberme expresado con claridad, les agradezco.

Sin embargo, más que disfrutar la comodidad de que me hagan las cosas, yo prefiero que me enseñen a hacer las cosas por mi mismo. Ya que por ejemplo, sigo teniendo problemas para entender al 100% como "utilizar" los paréntesis en las llamadas de las funciones.

Esta vez, por ejemplo en el mismo formulario de los checkbox, tengo dentro de una tabla algunas TEXTAREA, las cuales para ahorrar espacio quisiera hacerlas que cambien de tamaño al dar clic en el encabezado de la tabla. Se me ocurrió llamar dos funciones para con una contraer y con la otra expandir el textarea debajo de ese encabezado.

Lo que tengo es algo así:
Código HTML:
Ver original
  1.   <TR>
  2.     <TH>
  3.       Usuarios <span onclick="expandir(users);contraer(users);"></span>
  4.     </TH>
  5.   </TR>
  6.   <TR>
  7.     <TD>
  8.       <TEXTAREA rows=2 cols=47 id="users" name="users"></TEXTAREA>
  9.     </TD>
  10.   </TR>

Y lo que yo había pensado utilizar como función es algo como esto (pero que si funcionara jejeje):
Código Javascript:
Ver original
  1. function expandir(campo){
  2.     if (document.getElementById(campo).rows < 3) document.getElementById(campo).rows = 25;
  3. }
  4. function contraer(campo){
  5.     if (document.getElementById(campo).rows > 2) document.getElementById(campo).rows = 2;
  6. }

De esta manera yo pensaba que si era menor a 3, es decir igual o menor a 2, entonces lo ampliara hasta 25. Pero que si era mayor a 24, es decir igual o mayor a 25, entonces lo redujera hasta 2.

Tal vez le pido mucho a javascript o deba abordarlo de diferente manera, pero igualmente quisiera que me auxiliaran para entender esto de los parentesis en js.

De antemano mil gracias por la ayuda, ojalá alguno fuera mi maestro particular XD
  #10 (permalink)  
Antiguo 05/11/2012, 15:21
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 9 meses
Puntos: 103
Respuesta: Manejar números en el argumento de una funcion

Hola :B

Gracias por la ultima linea :O XD

mira, vi tu codigo, esta linea de html
Código HTML:
Ver original
  1. Usuarios <span onclick="expandir(users);contraer(users);"></span>
tiene un problema, y tiene que ver con los parentesis de las funciones XD
el problema es que deberias hacerlo asi :
Cita:
Usuarios <span onclick="expandir('users');contraer('users');">▼</span>
fijate las comillas que le agregé, lo que pasa es que en vez de enviar la cadena users a la función , busca el valor de la variable users, y como esa variable no existe , tira un error.

hasta acá todo bien, ahora las dos funciones se ejecutan correctamente, el problema es que ahora, imaginate que no esta expandido, y quieres expandirlo, cuando uno hace click, la función expandir lo expande correctamente, pero le sigue automaticamente la función contraer, asi que lo contrae, por lo tanto no notarás que se haya expandido y contraido.
asi que en realidad tendrias que hacer una única funcion que envie el nombre del textarea, como expandir y contraer, pero que tenga las dos funciones incorporadas.
vamos a llamarla expandirOContraer(campo)

entonces usamos lo siguente en HTML

Cita:
Usuarios <span onclick="expandirOContraer('users');">▼</span>
ahora, creemos la función expandirOContraer

Código Javascript:
Ver original
  1. function expandirOContraer(campo){
  2. if (document.getElementById(campo).rows < 3) document.getElementById(campo).rows = 25; // si la cantidad de rows es menor a 3, la expandimos
  3. else document.getElementById(campo).rows = 25; //si no la expandimos, entonces la contraemos
  4. }

Bueno, espero que hayas entendido :D si queres que te ayude podes pedirme mi skype y te ayudo o te explico, hay personas que les gusta compartir los conocimientos, es eso

Un abrazo y que tengas un buen dia ( o buenass noches )

Etiquetas: funcion, html, input, manejar
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 00:47.