Foros del Web » Programando para Internet » Javascript »

Aumentar y disminuir campo de texto

Estas en el tema de Aumentar y disminuir campo de texto en el foro de Javascript en Foros del Web. Buenas a todos Se bastante poco de javascript. Mi "problema" es el siguiente: Tengo una variable en PHP llamada $cantidadmáxima que pongamos de ejemplo que ...
  #1 (permalink)  
Antiguo 22/05/2011, 13:39
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Aumentar y disminuir campo de texto

Buenas a todos

Se bastante poco de javascript.
Mi "problema" es el siguiente:

Tengo una variable en PHP llamada $cantidadmáxima que pongamos de ejemplo que es 10.
Por otro lado tengo el siguiente formulario con un campo textbox y 2 botones, uno de ellos incrementa la cantidad del texbox en 1 unidad y el otro la decrementa:

Código HTML:
Ver original
  1. <script language="JavaScript">
  2. var contador=0;
  3. function incrementar() {
  4. if(contador==10)
  5. alert('Maximo permitido alcanzado: 10');
  6. else {
  7. document.formulario.precio.value= contador+;
  8. }
  9. }
  10. function decrementar() {
  11. if(contador==0)
  12. alert('Minimo permitido alcanzado: 0');
  13. else {
  14. document.formulario.precio.value= contador--;}
  15. }
  16. </script>
  17. <p>Forma 1:
  18. <form name="formulario">
  19. <input type="button" onClick="incrementar()" value="+">
  20. <input type="button" onClick="decrementar()" value="-">
  21. <input name="precio" value=0 type="text" >
  22. </form>
  23. </p>

Mi primera duda es la siguiente: ¿Como puedo poner en vez de que el máximo permitido sea 10 que sea el valor que tiene $cantidadmaxima?

Y mi duda más importante: ¿Por que si escribo un valor en el textbox y luego le doy a decrementar/incrementar en vez de decrementar/incrementar la cifra que he introducido de forma manual, me coge y me decrementa o incrementa la cifra por donde dejé de darle al botón? Pongo un ejemplo para explicarme bien:
Parto de cero al arrancar la pantalla, y incremento 2 veces hasta poner el valor de textbox a 2. Luego cojo y de forma manual escribo un 7. Entonces voy y vuelvo a incrementar y en vez de salir 8, sale 3. ¿A que se debe? ¿Como puedo corregirlo?

Gracias
  #2 (permalink)  
Antiguo 22/05/2011, 13:44
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Aumentar y disminuir campo de texto

a) Simplemente haz un echo desde el servidor:
Código Javascript:
Ver original
  1. var maximo = <?php echo $cantidad_maxima; ?>;
b)
Se debe a que usas una variable global, y después de modificarla la asignas al value del campo. En vez de hacerlo así, recibe el valor del campo, modifícalo y luego lo asignas.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #3 (permalink)  
Antiguo 22/05/2011, 13:48
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Aumentar y disminuir campo de texto

Gracias por contestar de forma tan rápida.

En la pregunta A todo correcto, gran despiste por mi parte

En la B no se si te refieres a esto:
Código HTML:
Ver original
  1. var contador
  2. contador = document.formulario.precio.value;


Sino no te he entendido. De ser esto a lo que te refieres, decirte que el valor del campo me sale "NaN" una vez que decremento/incremento
  #4 (permalink)  
Antiguo 22/05/2011, 14:09
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Aumentar y disminuir campo de texto

lo he hecho al vuelo, a ver si funciona
Cita:
var comp = control.value == contador;
contador = control.value != contador ? control.value : contador;
if(contador ==10) {
alert('Maximo permitido alcanzado: 10');
} elseif(comp) {
document.formulario.precio.value= contador++;
}else{
document.formulario.precio.value= contador++;
  #5 (permalink)  
Antiguo 22/05/2011, 14:27
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Aumentar y disminuir campo de texto

Cita:
Iniciado por IsaBelM Ver Mensaje
lo he hecho al vuelo, a ver si funciona
Gracias por contestar pero no se exactamente q me quieres decir ni de donde sale control.value

La respuesta de cronos iba mas encaminada a lo que busco pero ya te digo gracias por contestar
  #6 (permalink)  
Antiguo 22/05/2011, 14:32
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Aumentar y disminuir campo de texto

"contol" es el campo es decir document.getElementById('campo')
  #7 (permalink)  
Antiguo 22/05/2011, 14:47
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Aumentar y disminuir campo de texto

Cita:
Iniciado por IsaBelM Ver Mensaje
"contol" es el campo es decir document.getElementById('campo')
En mi caso precio no? es que arriba pusiste control.value y abajo precio.value y eso me descolocó un poco

Ya digo que de javascript lo justito
  #8 (permalink)  
Antiguo 22/05/2011, 14:57
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Aumentar y disminuir campo de texto

Vamos a ver:
Código Javascript:
Ver original
  1. var max = <?php echo $cantidad_maxima; ?>;
  2. function incrementar(frm){
  3.  var num = frm.precio.value;
  4.  num >= 10 ?
  5.   alert('Máximo permitido alcanzado: 10') :
  6.   frm.precio.value= ++num;
  7. }
  8. function decrementar(frm) {
  9.  var num = frm.precio.value;
  10.  num <= 0 ?
  11.   alert('Mínimo permitido alcanzado: 0') :
  12.   frm.precio.value= --num;
  13. }
Código HTML:
Ver original
  1. <p>Forma 1:
  2. <form name="formulario">
  3. <input type="button" onClick="incrementar(this.form)" value="+">
  4. <input type="button" onClick="decrementar(this.form)" value="-">
  5. <input name="precio" value='0' type="text" >
  6. </form>
  7. </p>
No he comprobado si funciona, si no avísame.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #9 (permalink)  
Antiguo 22/05/2011, 15:05
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Aumentar y disminuir campo de texto

gracias una vez mas

Lo de si le meto un 7 cuando el valor es 5 y decremento/incremento = CORRECTO

El problema es que si la variable $cantidad_maxima es de 9 y llega al tope, aunque decremente, me dice que se ha alcanzado el mínimo (en este caso cero)


PD: Edito: Todo correcto!!! El fallo era mio que en vez de cero al decrementar puse la variable max. Ahora si va todo perfecto MUCHAS GRACIAS!!


PD: Edito por segunda vez. Y si quisiera incrementar solo 0.5???

Última edición por yosoloyo; 22/05/2011 a las 15:11
  #10 (permalink)  
Antiguo 22/05/2011, 15:46
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Aumentar y disminuir campo de texto

Entonces deberías modificar la función, y cambiar
Cita:
... = ++num;
por
Cita:
... += 0.5;
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #11 (permalink)  
Antiguo 22/05/2011, 15:52
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Aumentar y disminuir campo de texto

Lo probé antes de ponerlo porque me parecía de cajón que fuera así, pero cuando lo pongo no va la función.

Por cierto y ya para apuntillar........ Si se cambia el valor del campo texto y se pone por ejemplo 11 siendo el máximo 10.... ¿como se podría cambiar el valor introducido por 10?? supongo que desde OnChange()

He probado con esto pero.... no funciona:
Código HTML:
Ver original
  1. function cambiar(frm) {
  2.     if(frm.precio.value >= <?php echo $cantidad_maxima; ?>)
  3.     {alert('El maximo permitido es: <?php echo $cantidad_maxima; ?>');}
  4.    
  5. }


Siento estar dándote la lata. Muchas gracias por tus respuestas


Edito: lo del onChange="cambiar(this.form)" SOLUCIONADO
  #12 (permalink)  
Antiguo 22/05/2011, 16:18
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Aumentar y disminuir campo de texto

Pon el código de aumentar como lo tienes ahora para ver dónde está el fallo.
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #13 (permalink)  
Antiguo 22/05/2011, 17:12
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Aumentar y disminuir campo de texto

el error está en que los valores se concadenan. usa el método Math.pow. algo como esto
Cita:
numero = parseFloat(0.5)+parseFloat(document.getElementById ('campo').value)
dec = Math.pow(10, parseInt(2))
parseInt(numero * dec) / dec
  #14 (permalink)  
Antiguo 22/05/2011, 23:24
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Aumentar y disminuir campo de texto

Cita:
Iniciado por IsaBelM
el error está en que los valores se concadenan.
Ups, claro!
Por cierto
Cita:
parseInt(numero * dec) / dec
esta línea, ¿es para imitar un toFixed(2)? Porque así de repente no le veo otra función.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #15 (permalink)  
Antiguo 23/05/2011, 07:16
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Aumentar y disminuir campo de texto

Cita:
Iniciado por _cronos2 Ver Mensaje
Ups, claro!
Por cierto

esta línea, ¿es para imitar un toFixed(2)? Porque así de repente no le veo otra función.
Saludos (:
no es que lo imite, sino que es el proceso interno del método toFixed(). o al menos así creo que es

tu código, al igual que el mio, no ha tenido en cuenta la estupidez humana. como el campo no estará deshabilitado, si se introduce un carácter no numérico, aparecerá un gracioso NaN. propuesta
Cita:
num >= 10 ? alert('Máximo permitido alcanzado: 10') : isNaN(num) ? alert('no es un digito') : frm.precio.value= parseInt(num * dec) / dec;
otro factor a tener en cuenta es el hecho que se puede insertar valores negativos (con lo que las funciones harán lo contrario de lo que se espera) o positivos mayores de los permitidos

aún quedan cosas por resolver
  #16 (permalink)  
Antiguo 23/05/2011, 09:19
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Aumentar y disminuir campo de texto

Muchas gracias una vez mas por vuestra implicación

Y perdonar mi torpeza pero esto sigue sin funcionar......

La función incrementar qudaría así, pero no funciona:

Código HTML:
Ver original
  1. var max = <?php echo $cantidad_maxima; ?>;
  2. function incrementar(frm){
  3.  var num = frm.precio.value;
  4.  if(num >= max)
  5.  {
  6.     alert('Maximo permitido alcanzado: <?php echo $cantidad_maxima; ?>');
  7.  }
  8.  else
  9.  { 
  10.     num = parseFloat(0.5)+parseFloat(document.getElementById ('precio').value)
  11.     dec = Math.pow(10, parseInt(2))
  12.     parseInt(num * dec) / dec
  13.     frm.precio.value= num;
  14.  }

No se si falta algún punto y coma por algún lado o que por ejemplo "dec" no está declarado por ningun lado a no ser que no haga falta declararlo o algo pasa porque la forma de sumarle los 0.5 no lo entiendo :(

Por otro lado a la hora de introducir un positivo de forma manual si lo tengo resuelto, al igual que a la hora de meter un caracter que no sea numérico. El problema lo tengo a la hora de meter un negativo, que en el onchange no me lo reconoce, pero eso es ahora secundario, lo que si me gustaría es arreglar lo del 0.5

Gracias a los dos y perdonar mi torpeza con javascript
  #17 (permalink)  
Antiguo 23/05/2011, 10:44
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Aumentar y disminuir campo de texto

Cita:
Iniciado por IsaBelM Ver Mensaje
no es que lo imite, sino que es el proceso interno del método toFixed(). o al menos así creo que es
Entonces, ¿por qué no usar toFixed directamente?

Cita:
Iniciado por yosoloyo Ver Mensaje
Código Javascript:
Ver original
  1. var max = <?php echo $cantidad_maxima; ?>;
  2. function incrementar(frm){
  3.  var num = frm.precio.value;
  4.  if(num >= max)
  5.  {
  6.     alert('Maximo permitido alcanzado: <?php echo $cantidad_maxima; ?>');
  7.  }
  8.  else
  9.  { 
  10.     num = parseFloat(0.5)+parseFloat(document.getElementById ('precio').value)
  11.     dec = Math.pow(10, parseInt(2))
  12.     parseInt(num * dec) / dec
  13.     frm.precio.value= num;
  14.  }
A ver ahora:
Código Javascript:
Ver original
  1. var max = <?php echo $cantidad_maxima; ?>;
  2. function incrementar(frm){
  3.  var num = frm.precio.value;
  4.  if(num >= max)
  5.  {
  6.     alert('Maximo permitido alcanzado: <?php echo $cantidad_maxima; ?>');
  7.  }
  8.  else
  9.  { 
  10.     num = parseFloat(num);
  11.     frm.precio.value = (num + 0.5).toFixed(2);
  12.  }
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #18 (permalink)  
Antiguo 23/05/2011, 11:22
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Aumentar y disminuir campo de texto

Fenomenal!!! ahora si!!!

Ya creo que está todo solucionado:
-Se incrementa sin problemas de 0.5 en 0.5
-Si sobrepasa el máximo o el mínimo con onchange pone automaticamente el máximo y el mínimo
-No se pueden escribir en el textbox mas que numeros y puntos ademas de usar retroceso gracias a onkeypress


Una última duda .... como sería a la hora de perder el foco del textbox se llamara a una función? en este caso querría llamar a la función de esa forma que creo que es onfocus y no a través de onchange, ya que onchange hasta que no se pierde el foco de todas formas no la llama.

Muchas gracias!!!!!
  #19 (permalink)  
Antiguo 23/05/2011, 11:56
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Aumentar y disminuir campo de texto

onfocus se ejecuta cuando el campo recibe el foco, onblur cuando lo pierde, y onchange... es un poco especial. Yo en inputs no lo uso, sólo en selects. Aquí más info.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #20 (permalink)  
Antiguo 23/05/2011, 12:14
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Aumentar y disminuir campo de texto

Cita:
Iniciado por _cronos2 Ver Mensaje
Entonces, ¿por qué no usar toFixed directamente?
una que está así de ida no, en serio, me gusta saber el proceso interno de las funciones
  #21 (permalink)  
Antiguo 23/05/2011, 14:23
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Aumentar y disminuir campo de texto

gracias de nuevo a los dos todo aclarado y perfecto
  #22 (permalink)  
Antiguo 23/05/2011, 14:30
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Aumentar y disminuir campo de texto

Cita:
Iniciado por yosoloyo
gracias de nuevo a los dos todo aclarado y perfecto
Me alegro, si tienes más problemas aquí estamos
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: aumentar, campos
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 14:25.