Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

273
Vistas
Las extensiones de tema de la aplicación Shopify jQuery no cargan/no funcionan

Estoy tratando de crear una extensión de aplicación de tema para Shopify para ejecutar JavaScript cuando se hace clic en el botón Agregar al carrito. Como ejemplo:

 <head> <script type="text/javascript" src={{ 'jquery-3.6.0.js' | asset_url }} defer></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js" rel="preload" defer="defer"></script> </head> ... <button id="add-btn">click me!</button> <script> jQuery( document ).ready(function() { $('#add-btn').on('click', function(event){ alert("clicked") }) }); </script>

Esto está dentro de una extensión de aplicación de hoja en la carpeta de bloques.

Parece que jquery no se carga y aparece un error

 Uncaught ReferenceError: jQuery is not defined

¿Alguna idea de por qué?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Resumen: está cargando la biblioteca jQuery con la palabra clave defer para que no bloquee la carga de la página, pero está haciendo referencia a jQuery antes de que la página termine de cargarse.


Al cargar jQuery usando el atributo defer en la etiqueta del script, el navegador comenzará a cargar el script inmediatamente, pero no lo ejecutará hasta que se haya cargado el contenido del DOM:

 <script type="text/javascript" src={{ 'jquery-3.6.0.js' | asset_url }} defer></script>

Sin embargo, la etiqueta de secuencia de comandos en línea más abajo en la página se ejecutará inmediatamente cuando el navegador llegue a ella:

 <script> jQuery( document ).ready(function() { // ERROR! jQuery library hasn't been run yet, so we can't use jQuery to select the document! $('#add-btn').on('click', function(event){ alert("clicked") }) }); </script>

Dado que los scripts diferidos se ejecutan en el orden en que se definen, su instinto podría ser intentar poner la palabra clave defer en la etiqueta del script en línea, pero desafortunadamente, defer y async solo se aplican a los archivos de script externos.

Hay varias formas de resolver este problema de tiempo. Dos posibilidades son:

1: Mueva el script en línea a un archivo Javascript externo

Si crea un archivo JS externo, puede cargar el script con la palabra clave defer ya que todos los scripts diferidos se ejecutan en el orden en que fueron llamados una vez que el DOM está listo. Como una ventaja adicional, no necesitaría envolver su función con jQuery(document).ready , ya que sabría que el documento está listo cuando se ejecuta el script.

2: Use Vanilla Javascript en lugar de jQuery para configurar su detector de eventos

Si la etiqueta de secuencia de comandos en línea tiene sentido, el uso de Javascript estándar para configurar su evento resolverá su problema. El código equivalente sería usar la función addEventListener para escuchar el evento DOMContentLoaded :

 <script> // This event is created before the DOM is loaded, so jQuery doesn't exist yet document.addEventListener('DOMContentLoaded', function() { // This event will be run after the deferred scripts above, so jQuery exists now $('#add-btn').on('click', function(event){ alert("clicked") }) }); </script>
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda