Problema con script en php y librería jquery

B

Pues eso, tengo el index.php en plan:

<body>
..
<?php require_once('contenido.php'); ?>
..
<script src="jquery.js"></script>
</body>

Consola: $ is not defined

La cosa es que en el contenido php tengo un evento para activar un modal, pero claro $ no está aún definido porque salta antes de llegar a la librería jquery.
Imagino que cargar las librerías antes no es opción ya que en bootstrap daría problemas cargarlo antes de cargar el html.

¿cómo puedo hacer que funcione?

sh31k

Con esa pieza de código poco podemos ayudarte.

Puede que estés cargando el jquery después de otro script que lo utilice, pero con esa porción no te puedo decir el fallo exacto

1 respuesta
Lord_Khronus

El jquery hay que cargarlo en el head para que te funcione.

1 respuesta
B

#2 sí claro, el php precisa de jquery antes de que jquery esté cargado, pero siempre se suele recomendar poner las librerías al final para que funcione todo bien no? el problema es ese, no sé como hacer que el script salte una vez haya cargado la librería.

#3 pero no dicen que da problemas ponerlo arriba? bootstrap de hecho lo usa desde abajo porque usa triggers que actúan posterior a la carga de manera manual, pero claro, yo necesito hacer saltar un evento si se da una condición en la url, y por tanto el php lo hace saltar en esa condición antes de que haya cargado jquery al final.

1 respuesta
sh31k

#4 Si el contenido.php utiliza jquery, debes haberlo precargado.

Es mala práctica ponerlo en el head, pero no te queda de otra sin refactorizar el código

1 respuesta
B

#5 Sí, pues es la opción que quería descartar, por eso quería saber si hay alguna otra opción :man_shrugging:

B

Donde tienes el Jquery.js?

1 respuesta
X-Crim

ánimo con el aprendizaje

2 respuestas
B

#7 antes de cerrar el body, en el index.php, como pone arriba.

#8 evidentemente, no vivo de esto.

1 respuesta
privet

has probado poner

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

en la consola te debería salir el error

B

#9 Perdona, me refiero a que en que carpeta tienes el jquery.js?
Yo suelo meterla en una carpeta scripts junto con todos los demás que tenga... entonces src=scripts/jquery.js

1 respuesta
ItNaS

#8 qué gran comentario, motivando así a alguien que quiere aprender...

1 respuesta
B

#11 idem, eso no es problema, el tema es en el momento de cuándo cargar jquery y cuándo salta el script que precisa jquery.

ItNaS

donde tienes el codigo que utiliza jquery?

1 respuesta
B

#14
-- index.php

<body>
..
<?php require_once('contenido.php'); ?>
..
<script src="/utils/js/jquery.js"></script>
</body>

-- contenido.php

...
<script>
      $("#exampleModal").modal({backdrop:"static", keyboard:false});
</script>
...

--
---- utils
------ js
-------- jquery.js

...

Si la cosa es que el index.php incluye el contenido.php el cual si se da una condición de la url salta el script, pero claro, todo esto antes de que index.php acabe de cargar y por tanto haya incluido las librerías.

Si ya sé que tiene que dar error, es evidente, pero pregunto alguna forma de precargarlo o hacer que el script de contenido.php no salte hasta que esté todo el index.php cargado.

1 respuesta
ItNaS

Si no puedes cambiar como esta estructurado el codigo para que eso cargue despues de meter jquery puedes probar a hacer algo del estilo;

window.addEventListener("load", function() {
  $("#exampleModal").modal({backdrop:"static", keyboard:false});
});

De esta manera te aseguras que tu js se ejecute cuando haya cargado la pagina (y por ende jquery).

1 2 respuestas
Lord_Khronus

#15 Lo de poner los scripts al final se hace porqué ralentizan el renderizado de la web, interesa cargar rápido el html y el css y ya luego los scripts que mejoran la interactividad. Si tu página requiere el jquery para ser renderizada no pasa nada por ponerlo en el header.

B

#16 perfecto, eso es lo que quería. muchas gracias.

X-Crim

#12 tienes razón, edito

KoRMuZ

#1 lo que te está pasando es lo que te han comentado ya. Estás intentando acceder a $ antes de que cargues el propio $.

Solución -y diría que única-, cargar jquery antes del contenido.

Otra opción, en contenido dejas todo lo que hay, y pasas ese escript de exampleModal a otro archivo js, y lo enchufas despues del jquery

<body>
<?php require_oncde ('contenido.php'); ?>
...
<script jquery>
<script jsParaElModal>
</body>
isvidal

#16 esto es lo que deberias hacer y no ponerlo en el head

1 respuesta
B

#21 así es, me funcionó perfecto.
Gracias a tod@s

Usuarios habituales