Error de referencia no capturado: $ no está definido?

658

¿Cómo es que este código arroja un

Error de referencia no capturado: $ no está definido

cuando estuvo bien antes?

$(document).ready(function() {
    $('#tabs > ul').tabs({ fx: { opacity: 'toggle' } });
    $('#featuredvid > ul').tabs();
});

Los resultados en pestañas ya no se cierran.

Se hace referencia a jQuery en el encabezado:

<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/sprinkle.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-1.2.6.min.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-ui-personalized-1.5.2.packed.js"></script>
Olivers
fuente
<script language = "JavaScript" type = "text / javascript" src = "<? php echo get_option ('siteurl')?> / js / jquery-1.2.6.min.js"> </script> Tome esto en arriba
captainsac
En mi caso, JQuery estaba en la sección de pie de página, por lo que se llamó primero a la función JS.
Daniel Beltrami el
¿Responde esto a tu pregunta? ReferenceError: $ no está definido
Brynn

Respuestas:

689

Debe poner las referencias a los scripts jquery primero.

<script language="JavaScript" type="text/javascript" src="/js/jquery-1.2.6.min.js"></script>
<script language="JavaScript" type="text/javascript" src="/js/jquery-ui-personalized-1.5.2.packed.js"></script>
<script language="JavaScript" type="text/javascript" src="/js/sprinkle.js"></script>
Jeremy
fuente
27
Solo para estar seguro de que esto está claro: no puede poner la referencia del script a jquery-ui antes del script jquery en sí. Eso es lo que me solucionó el problema: primero jquery-xxxmin.js, luego jquery-ui-xxxxxx.js.
Wagner da Silva
26
2 años después, la respuesta aún no está "marcada") Este artículo describe este y 4 casos más comunes cuando se produce este error.
Uzbekjon
2
@Uzbekjon Eso lo resolvió para mí. La ruta al script estaba mal en uno de mis HTMLarchivos.
Adam Jensen
@ Jeremy, muchas gracias. También póngalo antes de cualquier vista parcial (mvc) para que esté disponible para cualquier script en el parcial.
Andrew Day
1
@Uzbekjon hace casi 10 años y todavía no está marcado. Gracias por proporcionar el enlace del artículo.
Modo
235

Está llamando a la función ready antes de que se incluya jQuery JavaScript. Referencia jQuery primero.

Fuente abierta
fuente
30
@RamSharma En realidad, esta es la respuesta correcta. No necesita nada más para resolver el problema.
Derek 朕 會 功夫
Sip. Este fue mi problema. Simplemente tenía jquery DESPUÉS de hacer referencia a mi archivo js. D'oh!
dogonaroof
En mi caso, tuve que eliminar la clave diferida de <script src = "/ js / jquery-1.2.6.min.js" defer> </script>
Charden Daxicen
123

Esto es lo que me resolvió. Originalmente fui a Google y copié y pegué su fragmento sugerido para jQuery en su página de CDN:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

El fragmento no incluye el atributo HTTP:o HTTPS:en el srcatributo, pero mi navegador, FireFox, lo necesitaba, así que lo cambié a: editar: esto también funcionó para mí con Google Chrome

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

Entonces funcionó.

Marlin Mixon
fuente
13
Estrictamente hablando, el fragmento / ejemplo de Google es correcto: su atributo src es una URL sin protocolo, lo que significa que el navegador debe usar el protocolo (HTTP / HTTPS) de la página de llamada. Ver paulirish.com/2010/the-protocol-relative-url . Esta es la mejor práctica para evitar advertencias de contenido mixto si su página alguna vez se sirve a través de SSL y las secuencias de comandos no.
pwdst
12
Un problema común aquí, probablemente, es cuando las URL relativas al protocolo se usan durante el desarrollo, y en un día soleado intenta cargar una página desde un archivo local. Su navegador intentará cargarse de manera optimista file://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.jsy se pregunta por qué no aparece en la consola de red.
Pieter Ennes
gracias @PieterEnnes, este fue exactamente el caso para mí. Gracias a la respuesta también!
jwg
43

Si su script personalizado se carga antes de que el complemento jQuery se cargue en el navegador, puede ocurrir este tipo de problema. Por lo tanto, siempre mantenga su propio código JavaScript o jQuery después de llamar al complemento jQuery, por lo que la solución para esto es:

Primero agregue el enlace al archivo jQuery alojado en GoogleApis o un archivo jQuery local que descargará de http://jquery.com/download/ y aloje en su servidor:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

o cualquier complemento para jQuery. Luego, coloque el enlace o código del archivo de script personalizado:

<script src="js/custom.js" type="text/javascript"></script>
Jnanaranjan
fuente
3
If your custom script is loaded before the jQuery plugin is loaded to the browser then this type of problem may occur la respuesta perfecta ... en mi caso, el guión estaba en el pie de página
echoashu
41

En mi caso, estaba poniendo mi .jsarchivo antes del enlace del script jQuery, poner el .jsarchivo después del enlace del script jQuery resolvió mi problema.

<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="exponential.js"></script>
shivam
fuente
Acabo de usar esto para arreglar mi jschart.
indofraiser
Esto solucionó el problema, el .js archivo debe colocarse antes del enlace del script jQuery.
El método científico
27

De acuerdo, mi problema era diferente: era el modelo de seguridad de documentos en Chrome .

Mirando las respuestas aquí, era obvio que de alguna manera no estaba cargando mis archivos jquery antes de llamar a las $(document).ready()funciones, etc. Sin embargo, todos estaban en las posiciones correctas.

En mi caso, esto se debió a que estaba accediendo al contenido a través de una conexión HTTPS segura, mientras que la página intentaba descargar los datos alojados en CDN de google, etc. La solución fue almacenarlos localmente y luego incluirlos directamente en lugar de CDN cada vez.

Editar : La otra forma de hacerlo es vincular a todas las cosas alojadas en CDN como https: // en lugar de http: //, entonces el modelo no se queja.

Sudipta Chatterjee
fuente
55
Además, tenga en cuenta que puede dejar el protocolo fuera de los enlaces y elegirá el apropiado según el contexto (suponiendo que existan versiones http y https). Ver stackoverflow.com/a/3622615/4332
Adrian Mouat
Sí. este resolvió mi problema, estaba cargando los scripts de una URL como esta ´ // cdnjs.cloudflare.com / ajax / libs / jquery / 1.12.0 / jquery.min.js´. Usar ' cdnjs ...' funciona muy bien
user9869932
25

Agregue la biblioteca antes de iniciar el script. Puede agregar cualquiera de estos CDN siguientes para iniciarlo.

Google:

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

Microsoft

<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>

Jquery

Si desea cualquier otra versión de Jquery cdn, consulte este enlace .

Después de este:

<script type="text/javascript">
$(function(){
    //your stuff
});
or
$(document).ready(function(){
    //your stuff
});    
</script>

Wordpress:

<script type="text/javascript">
var $ = jQuery;
jQuery(document).ready(function($){
     //your stuff
});
</script>
lalithkumar
fuente
19

Si está en WordPress, podría ser necesario cambiar

$(document).ready(function() {

a

jQuery(document).ready(function($){

o agregar

var $ = jQuery;

antes de

$(document).ready(function() {
xoxn-- 1'w3k4n
fuente
19

Tuve exactamente el mismo problema y ninguna de estas soluciones anteriores me ayudó. Sin embargo, acabo de vincular los .cssarchivos después de los .jsarchivos y el problema desapareció milagrosamente. Espero que esto ayude.

cobarde
fuente
13
Primero, para un mejor rendimiento de representación de página, siempre debe vincular archivos CSS antes que archivos JS. En segundo lugar, el orden de los archivos css y js no debería tener efecto en la situación actual.
Uzbekjon
12
"Lo que solucionó su problema no debería solucionarlo y no debería hacer lo que solucionó su problema".
Andrew
15

Quería intentar hacer mi script asincrónico . Luego lo olvidé y cuando entré en funcionamiento, el archivo .js [personalizado] solo se cargó el 50% del tiempo antes de jQuery.js.

Entonces cambié

<script async src="js/script.js"></script>

a

<script src="js/script.js"></script>
Sindri Þór
fuente
14

En mi caso, tuve este error de referencia porque el orden de las llamadas de script era incorrecto. Resuelto eso cambiando el orden:

<script src="js/index.js"></script>
<script src="js/jquery-1.10.2.js"></script>

a

<script src="js/jquery-1.10.2.js"></script>
<script src="js/index.js"></script>
Yannis Dran
fuente
1
Principalmente, este fue el problema que también encontré cuando ocurre un error de referencia para '$'
Dipak
9

Tuve el mismo problema y lo resolví colocando jQuery en la parte superior de todos los códigos javascript que tengo en mi código.

Algo como esto:

<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="js/app.js" type="text/javascript"></script>
<script src="js/form.js" type="text/javascript"></script>
<script src="js/create.js" type="text/javascript"></script>
<script src="js/tween.js" type="text/javascript"></script>

La esperanza puede ayudar a alguien en el futuro.

El hombre muerto
fuente
8

Está llamando a la ready()función antes de que se incluya jQuery JavaScript. Referencia jQuery primero.

Si está en ASP.NET MVC, puede especificar cuándo se debe representar su código JS, haciendo esto:

1, en su page.cshtmlenvoltura su <script>etiqueta en una sección, y asígnele un nombre, el nombre común para usar es 'scripts':

@section scripts {
    <script>
        // JS code...
    </script>
}

2, en su _Layout.cshtmlpágina agregue @RenderSection("Scripts", required: false), asegúrese de ponerlo después de hacer referencia a la fuente Jquery, esto hará que su código JS se procese más tarde que Jquery.

Mayer Spitzer
fuente
6

Si está haciendo esto en .Net y tiene el archivo de script referenciado correctamente y su jQuery se ve bien, asegúrese de que sus usuarios tengan acceso al archivo de script. El proyecto en el que estaba trabajando (un compañero de trabajo) tenía su web.config denegando el acceso a usuarios anónimos. La página en la que estaba trabajando era accesible para usuarios anónimos, por lo tanto, no tenían acceso al archivo de script. Se dejó caer lo siguiente en web.config y todo estaba bien en el mundo:

  <location path="Scripts">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
peroija
fuente
6

En mi caso fue un error tipográfico, olvidé una barra invertida y estaba haciendo referencia incorrectamente a la fuente.

antes de src="/scripts/jquery.js"

Después    src="scripts/jquery.js"

Dennis
fuente
5

El archivo fuente jquery-1.2.6.min.jsno se llama el comando jQuery $()se ejecuta antes de <..src='jquery-1.2.6.min.js'>.

<.. src="/js/jquery-1.2.6.min.js..">Primero ejecute y asegúrese de que la ruta src sea correcta, luego ejecute el comando jquery

$(document).ready(function() 
charles hsu
fuente
5

Esto me sucedió antes.

La razón fue que estoy conectando Android a una vista web con un JS. Y envié un parámetro sin comillas.

js.sayHello(hello);

y cuando lo cambié a

js.sayHello('hello');

funcionó.

Reinherd
fuente
No tengo idea de qué parámetro sin comillas significa ... parece que tuvo un error de referencia.
Aluan Haddad
Tuve un problema en Freemarker y la razón fue la ausencia de comillas simples, por lo que el valor se trató no como una cadena, sino como una variable
torina
4

Falta su archivo JavaScript, por lo que se produjo este error. Simplemente agregue el archivo JavaScript dentro de la <head>etiqueta. Mira el ejemplo:

<script src="js/sample.js" type="text/javascript"></script>
<link href="css/sample.css" rel="stylesheet" type="text/css" />

o agregue el siguiente código en la etiqueta:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
Gaurav Gupta
fuente
4

El error ocurrirá también en los siguientes dos escenarios.

  1. Falta el elemento de secuencias de comandos @section del archivo HTML
  2. Error al acceder a elementos DOM. Por ejemplo, el acceso al elemento DOM se menciona como $ ("js-toggle") en lugar de $ (". Js-toggle"). En realidad falta el período

Por lo tanto, debe seguir 3 cosas: verifique que se agreguen los scripts requeridos, verifique si se agregaron en el orden requerido y los terceros errores de sintaxis en su Java Script.

Sankar Krishnamoorthy
fuente
Si. y para los atributos de identificación $ ('# someDiv')
cagcak
3

Doh! Tenía comillas mixtas en mis etiquetas que hicieron que la referencia de jquery se rompiera. Hacer una inspección en Chrome me permitió ver que el archivo no estaba vinculado correctamente.

justreed
fuente
3

En mi caso, olvidé incluir esto:

 <script src ="jquery-2.1.1.js"></script>

Anteriormente estaba incluyendo solo jquery-mobile que estaba causando este error.

Anand
fuente
3

Modifiqué la etiqueta del script para señalar el contenido correcto y cambié el orden del script para que sea el correcto en el editor. Pero olvidé por completo guardar el cambio.

Hexodus
fuente
2

Tuve un problema similar y fue porque me faltaba un cierre> en un enlace de hoja de estilo.

jason
fuente
2
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="local_xxx.js"></script>

Tengo un problema similar, y sabes qué, es porque la red está desconectada cuando pruebo en la vista web del dispositivo Android y no me doy cuenta, y el js local no tiene problemas para cargar porque no necesita red. Parece ridículo, pero pierdo mi ~ 1 hora para descubrirlo.

Fruta
fuente
2

No ha hecho referencia a una biblioteca jQuery.

Deberá incluir una línea similar a esta en su HTML:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
asghar
fuente
2

Tuve un problema similar. Mi servidor de prueba funcionaba bien con "http". Sin embargo, falló en la producción que tenía SSL.

Por lo tanto, en producción, agregué "HTPPS" en lugar de "HTTP" y en la prueba, lo mantuve como "HTTP".

Prueba:

wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js', array(), null, false );

wp_register_script( 'custom-script', plugins_url( '/js/custom.js', __FILE__ ), array( 'jquery' ) );

Producción:

wp_register_script( 'jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js', array(), null, false );

wp_register_script( 'custom-script', plugins_url( '/js/custom.js', __FILE__ ), array( 'jquery' ) );

Espero que esto ayude a alguien que está trabajando en WordPress.

usuario3671115
fuente
1

Por extraño que parezca, mi problema provenía de PHP.

Una llamada a la API REST estaba fallando, y luego estaba interrumpiendo la carga de las bibliotecas. Como la falla fue de la llamada REST, no me dio un error de compilación php.

Mantenga esto como una opción también, si cargar jquery parece estar bien.

Aris
fuente
1

Tuve este problema cuando estaba navegando en Internet a través de mi punto de acceso móvil. también estaba comprimiendo imágenes y agregó el siguiente script en la parte inferior de la etiqueta del cuerpo

<script language="javascript"><!--
bmi_SafeAddOnload(bmi_load,"bmi_orig_img");//-->
</script>

Cuando me conecté a una conexión wifi adecuada, todo parece funcionar para mí. Espero que esto ayude a alguien.

bubb
fuente
1

Esto también puede suceder, si hay un problema de red. Lo que significa que, a pesar de que los "scripts jquery" están en su lugar y se incluyen antes de su uso, ya que los scripts jquery no son accesibles, al momento de cargar la página, por lo tanto, las definiciones de "$" se tratan como "referencias indefinidas".

PARA FINES DE PRUEBA / DEPURACIÓN :: Puede intentar acceder a la url "jquery-script" en el navegador. Si es accesible, su página debería cargarse correctamente, de lo contrario, mostrará dicho error (u otros errores relevantes del script). Ejemplo: http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js debe estar accesible en el navegador (o en las posiciones contextuales del navegador).

Tuve un problema similar, en el que pude cargar la página html (usando scripts) en mi navegador de host de Windows, pero no pude cargar en vm-ubuntu. Al resolver el problema de la red, se resolvió el problema.

parasitar
fuente
0
var $ = jQuery;
jQuery(document).ready(function($){
Jayanit Satani
fuente
1
Esto no es absolutamente una respuesta. Tienes que añadir algunas explicaciones.
jmlemetayer
Esta es una solución para Wordpressti, debes mencionar eso.
Hexodus
Salvaste mi día. Estaba luchando por hacerlo en WordPress y ninguno, pero esta solución funcionó de maravilla.
rahimv