Tengo un script que ocultará un botón de envío mientras el formulario se procesa para evitar múltiples clics en el botón. Recientemente, parece que esto no funciona todo el tiempo.

Puedo verificar que el archivo jQuery validado se esté cargando cada vez. No hice ninguna diferencia cuando usé el archivo cargado desde mi servidor o un CDN.

El error solo aparece cuando el archivo se carga desde la memoria caché del disco. Solucioné temporalmente el problema agregando un número de versión aleatorio después del archivo jQuery, pero me preguntaba qué podría estar causando la ruptura cuando se usa la memoria caché del disco.

La consola del navegador muestra este error:

custom-quote-form:21 Uncaught TypeError: $(...).validate is not a function
    at HTMLDocument.<anonymous> (custom-quote-form:21)
    at j (jquery.min.js:2)
    at Object.fireWith [as resolveWith] (jquery.min.js:2)
    at Function.ready (jquery.min.js:2)
    at HTMLDocument.I (jquery.min.js:2)

Jquery.min.js se carga primero, luego el archivo JS en caché de CMS después de eso es el archivo de validación jquery.

Este es el guion

<script> 
    $(function() {
        $("form[name='customBuilder']").validate({
            // remove error label  
            errorPlacement: function(error, element) {},
            rules: {
                fname: "required",
                lname: "required",
                phone: "required",
                company: "required",
                Email: {
                    required: true,
                    email: true
                },
            },
            submitHandler: function(form) {
                $("#loading-img").css("display", "block");
                form.submit();
                var elem = $("#submitMessage");
                elem.css("display", "none");
                setTimeout(function() {
                    elem.css("display", "");
                }, 10000);
            }
        });
    }); 
< /script>
0
N13Design 14 nov. 2017 a las 19:40

2 respuestas

La mejor respuesta

A.Wolff me puso en el camino correcto. Se eliminó defer = "defer" del enlace del complemento de validación de jquery. Fue agregado automáticamente por el CMS.

0
N13Design 14 nov. 2017 a las 20:45

Tengo un problema similar con este tipo de configuración. Avance rápido, seguí las pautas de Dev Tools de Chrome para aumentar la velocidad de la página. Ha identificado un script de bloqueo de procesamiento (archivo de biblioteca Jquery para ser precisos) en el encabezado de la página. Yo (siendo un novato en llamadas de eventos de ajax) he agregado la etiqueta "async" dentro de la etiqueta del script para cargarla de forma asincrónica.

Ahora que llegó el nuevo problema es que cuando cargo la página por primera vez todo funciona bien. Pero para algunas recargas posteriores aleatorias, rompa el javascript ya que estaba cargando todos los archivos javascript de manera asíncrona y algunos también se cargaban desde la memoria caché del disco. Así que he decidido buscar otras formas de optimización en lugar de cargarlo de manera "asincrónica".

0
Talk is Cheap Show me Code 11 dic. 2017 a las 10:15