Tengo un archivo componente:
my-component.blade.php
<!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> ...... </head> <body> ........ <script src="/vendor/jquery/jquery.min.js" defer></script> @stack('scripts') </body> </html> otherfile.blade.php
<x-my-component> ..... @push("scripts") <script defer> console.log($("body")); // a simple print element </script> @endpush </x-my-component> browser console
Uncaught TypeError: $ is not a function
Intenté usar el yield y la section y obtuve el mismo resultado. ¿Cómo puedo resolver este problema? (Tengo el archivo jquery en mi proveedor público, por lo que no hay forma de que el problema sea sobre la ruta de importación de jquery)
De la documentación para el elemento script :
Advertencia: el atributo [
defer] no debe usarse si el atributo src está ausente (es decir, para scripts en línea), en este caso no tendría efecto.
Entonces, el script que carga jQuery se ejecuta después de analizar el documento y el script que intenta usarlo se ejecuta inmediatamente (porque se defer el atributo diferido), que es antes de que se agregue $ al alcance de la página.