Foros del Web » Programando para Internet » Javascript »

Detener ejecución de funciones llamadas por eventos

Estas en el tema de Detener ejecución de funciones llamadas por eventos en el foro de Javascript en Foros del Web. Buenas tardes: Esta si es complicada, al menos para mi. Veamos.... Tengo un formulario en que uno de los datos a ingresar es la cantidad ...
  #1 (permalink)  
Antiguo 18/05/2012, 14:02
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Detener ejecución de funciones llamadas por eventos

Buenas tardes:
Esta si es complicada, al menos para mi. Veamos....

Tengo un formulario en que uno de los datos a ingresar es la cantidad de ítems de un artículo para un pedido. Esto requiere lo siguiente:
  1. Verificar que sólo se ingresen números enteros
  2. Verificar que exista el stock disponible para atender el pedido
  3. Recalcular toda la lista luego de modificar la cantidad de ítems

Todas las condiciones están cumplidas y funcionando bien. Y ese es el problema.
Este es el campo con los scripts

Cita:
<input type="text" name="cantidad" size="4" value="<%= array(3,J) %>" class="texto_cantidad" title="Puede modificar la cantidad de items"
onKeyUp="showHint(this.value);"
onChange="actualizarCantidad(this.value);"
onKeyPress="return acceptNum(event);">
autocomplete="off">
La función invocada por el evento onKeyPress me permite controlar el ingreso de sólo números y con esa no hay problema alguno.

Sin embargo la función invocada por el evento onChange es el que hace que se re-calculen los totales, sub-totales, etc. y claro, la función invocada por el evento onKeyUp es el que llama a una rutina en ajax que verifica que el monto ingresado NO sea mayor que el stock disponible.

Y funciona todo a la perfección, excepto que si pulso tab o enter aún cuando ha aparecido el mensaje de que el monto ingresado supera el stock disponible, automáticamente ejecuta la función actualizar() y bueno.... creo que es obvio lo que pasa.

Si el stock disponible es 100 y estoy ingresando el monto 101, la función showHint() muestra un aviso en pantalla indicando que no se puede atender el pedido por falta de stock, y al pulsar enter o tab, lejos de mantener el monto en original, hace que se ejecute la función actualizar() y toma como dato 101 y, bueno, lo lógico sería agregar una rutina de validación de stock para que al "recargar" no incluya la nueva cifra.

Por eso es que sería mejor, digo yo, si se pudiera "congelar" la ejecución de funciones ni bien la rutina en ajax determine que el monto es superior al que se puede atender.

Espero haberme explicado bien.

Un saludo desde Lima, Perú
  #2 (permalink)  
Antiguo 22/05/2012, 19:36
Avatar de ryugen
Colaborador
 
Fecha de Ingreso: agosto-2008
Ubicación: Rosario, Santa Fe
Mensajes: 350
Antigüedad: 15 años, 7 meses
Puntos: 187
Respuesta: Detener ejecución de funciones llamadas por eventos

Sugerencia rápida:

Capaz que es conveniente que invoques la funcion "actualizar()" durante la ejecución de la función "showHint()" si esta retorna que hay stock.

Ejemplo:

Código Javascript:
Ver original
  1. function showHint(){
  2.       if(ajax.hayStock()){
  3.                 actualizar();
  4.       } else {
  5.                //muestro hint
  6.       }
  7. }

de esta forma deberías sacar el evento change.

Si este método no es factible, tengo otros en mente pero son algo más complejos
  #3 (permalink)  
Antiguo 22/05/2012, 20:49
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Detener ejecución de funciones llamadas por eventos

Muchas gracias por responder. Voy a probar y comento luego.

Etiquetas: ajax, detener, eventos, formulario, funcion, funciones, input, llamadas
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 07:01.