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:
- Verificar que sólo se ingresen números enteros
- Verificar que exista el stock disponible para atender el pedido
- 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ú