Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/05/2012, 14:02
Avatar de freesoftwarrior
freesoftwarrior
 
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 9 meses
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ú