Tengo la siguiente situación en una aplicación web (javascript-jQuery):
Cuando se envía el formulario, a veces, cuando la cuenta bancaria está vacía, la validación "requerida" no se verifica. Después de una depuración loca, he visto que el control de máscara de entrada activa un evento de cambio y, por lo tanto, la solicitud se envía al servidor (por lo que la entrada está deshabilitada) y el validador no valida lo requerido, porque tiene como condición que los campos deshabilitados no sean validados.
Me gustaría "pausar" la validación hasta que finalicen todas las solicitudes, pero no he encontrado la manera de hacerlo fuera de la biblioteca. ¿Alguna idea de cómo resolver este problema sin modificar las librerías externas ("jquery inputmask" y "jquery tools")?
Finalmente he elegido la siguiente solución:
Cuando se presiona el botón de enviar, verifique si hay solicitudes pendientes antes de enviar. Utilizo un intervalo de javascript para verificar cada 200 ms (y durante un máximo de 10 intervalos para evitar formularios no enviados por seguimiento erróneo).
Por otro lado, compruebo si el formulario se está enviando antes de enviar una solicitud de regla en el servidor. Si el formulario se está enviando, no calculo la regla.
Publico el código adaptado para entender.
Función para verificar el envío del formulario:
// Check the form submit $(".submitButtom", ctl).click(function (e) { var $form = $(this).closest('form'); var areServerRulesRunning = $.mpm.formengine.genericRules.runningServerRules > 0; if (areServerRulesRunning) { // If are server rules running keep checking before submit var retries = 10; var interval = setInterval(function() { if ($.mpm.formengine.genericRules.runningServerRules <= 0 || retries < 0) { clearInterval(interval); // variable to track the submission of the form $.mpm.formengine.form.submitting = true; $form.submit(); } retries--; }, 200); } else { $form.submit(); } }); // Later on a callback after submit (don't published): $.mpm.formengine.form.submitting = false;Función que ejecuta las reglas del servidor en los cambios de entrada:
... // Rule execution serverCalculationRule: function (wfName, $sourceInput, controlScope, ruleData) { if ($.mpm.formengine.form.submitting === true) { // If the form is submitting don't send the request to the server return; } $.mpm.formengine.genericRules.runningServerRules++; $.post($.mpm.Constants.FormEngine.UrlDoAction, doActionData, function (data) { // SUCCESS } ) .always(function () { // ALWAYS $.mpm.formengine.genericRules.runningServerRules--; }); }, ...