未捕获ReferenceError:未定义$?


657

此代码如何引发

未捕获的ReferenceError:未定义$

以前什么时候可以?

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

选项卡中的结果不再关闭。

标题中引用了jQuery:

<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>

<script language =“ JavaScript” type =“ text / javascript” src =“ <?php echo get_option('siteurl')?> / js / jquery-1.2.6.min.js”> </ script>顶部
captainsac

在我的情况下,JQuery位于页脚部分,因此首先调用了JS函数。
丹尼尔·贝尔特拉米

这回答了你的问题了吗?的ReferenceError:$没有定义
的Brynn

Answers:


687

您应该首先将对jquery脚本的引用。

<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>

27
只是为了确保这很清楚:您不能在jquery脚本本身之前将对jquery-ui的脚本引用放在前面。那就是解决我的问题的原因:首先是jquery-xxxmin.js,然后是jquery-ui-xxxxxx.js。
Wagner da Silva

26
2年后,仍然没有“解决”的问题)本文介绍了发生这种错误的一种和四种其他常见情况。
乌兹别克斯坦,2013年

2
@Uzbekjon那为我解决了。我的其中一个HTML文件中的脚本路径错误。
亚当·詹森

@杰里米,非常感谢。还要将其放在任何局部视图(mvc)之前,以便它可用于局部视图中的任何脚本。
安德鲁·戴

1
@Uzbekjon已经近10年了,它仍然没有被打勾。感谢您提供文章链接。
Modo

235

在包含jQuery JavaScript之前,您正在调用ready函数。首先参考jQuery。


30
@RamSharma实际上,这是正确的答案。您不需要其他任何东西即可解决问题。
德里克·朕会功夫2015年

对。这是我的问题。只是在引用我的js文件之后有了jquery。天哪!
dogonaroof

就我而言,我不得不从<script src =“ / js / jquery-1.2.6.min.js” defer> </ script>中删除键延迟
Charden Daxicen

123

这就是为我解决的问题。最初,我去Google并在其CDN页面上复制并粘贴了jQuery的建议代码段:

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

该代码段未在属性中包含HTTP:HTTPS:src但我的浏览器FireFox需要它,因此我将其更改为:编辑:这对Google Chrome也适用

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

然后它起作用了。


13
严格来说,Google片段/示例是正确的-它们的src属性是不包含协议的URL,这意味着浏览器应使用调用页面的协议(HTTP / HTTPS)。参见paulirish.com/2010/the-protocol-relative-url。如果您的网页曾经通过SSL服务,而脚本没有通过SSL服务,那么这是避免混合内容警告的最佳做法。
2013年

12
这里的一个常见问题很可能是在开发过程中使用协议相对URL时,在晴天时,您尝试从本地文件加载页面。您的浏览器将乐观地尝试加载file://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js,您想知道为什么它不会出现在网络控制台中。
Pieter Ennes 2014年

谢谢@PieterEnnes,对我来说确实如此。也要感谢答题者!
2014年

43

如果在jQuery插件加载到浏览器之前加载了自定义脚本,则可能会出现这种类型的问题。因此,在调用jQuery插件后,请始终保留自己的JavaScript或jQuery代码,因此解决方案是:

首先,将链接添加到托管在GoogleApis上的jQuery文件或要从http://jquery.com/download/下载并托管在服务器上的本地jQuery文件中:

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

或任何jQuery插件。然后放入您的自定义脚本文件链接或代码:

<script src="js/custom.js" type="text/javascript"></script>

3
If your custom script is loaded before the jQuery plugin is loaded to the browser then this type of problem may occur 完美的答案..就我而言,脚本是在页脚中
echoashu 2014年

41

就我而言,我将.js文件放在jQuery脚本链接之前,将.js文件放在jQuery脚本链接之后解决了我的问题。

<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>

刚刚用它来修复我的jschart。
indofraiser '17

此问题已解决,.js 应将文件放在jQuery脚本链接之前。
科学方法

27

好的,我的问题有所不同-这是Chrome中的文档安全性模型

从这里的答案看,很明显,我在调用$(document).ready()etc.函数之前不以某种方式不加载我的jquery文件。但是,他们都处于正确的位置。

就我而言,这是因为我正在通过安全的HTTPS连接访问内容,而该页面试图从google等下载CDN托管数据。解决方案是将它们存储在本地,然后直接包含而不是从每次CDN。

编辑:执行此操作的另一种方法是以https://而不是http://的形式链接到所有CDN托管的内容-然后该模型不会抱怨。


5
另外,请注意,您可以不使用协议链接,而是根据上下文选择适当的协议(假设同时存在http和https版本)。参见stackoverflow.com/a/3622615/4332
Adrian Mouat 2013年

是的 这个解决了我的问题,我是从类似“ //cdnjs.cloudflare.com/ajax/libs/jquery/1.12.0/jquery.min.js”的网址中加载脚本的。使用“ cdnjs ...”效果很好
user9869932 2015年

25

在开始脚本之前添加库。您可以添加以下任何CDN来启动它。

谷歌:

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

微软

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

jQuery的

如果您需要其他任何Jquery cdn版本,请检查此链接

在这之后:

<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>

19

如果在wordpress中,可能需要进行更改

$(document).ready(function() {

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

或添加

var $ = jQuery;

之前

$(document).ready(function() {

19

我遇到了完全相同的问题,上述所有解决方案均无济于事。但是,我只是在.css文件链接后链接.js文件,问题奇迹般地消失了。希望这可以帮助。


13
首先,为了获得更好的页面渲染性能,您应该始终在CSS文件之前链接CSS文件。其次,css和js文件的顺序在当前引用中不起作用。
乌兹别克斯坦,2013年

12
解决问题的方法不能解决问题,解决问题的方法也不能。
安德鲁(Andrew)

15

我想尝试使脚本异步。然后我忘了它,当我上线时,[custom] .js文件仅在jQuery.js之前加载50%的时间。

所以我改变了

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

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

14

就我而言,我遇到了这个referenceError,因为脚本调用的顺序是错误的。通过更改顺序解决了该问题:

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

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

1
大多数情况下,这也是我在'$'发生参考错误时也发现的问题
Dipak 2014年

8

我遇到了同样的问题,我通过将jQuery放在代码中所有JavaScript代码的顶部来解决了问题。

像这样:

<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>

希望将来可以帮助一些人。


8

ready()在包含jQuery JavaScript之前,您正在调用该函数。首先参考jQuery。

如果您使用的是ASP.NET MVC,则可以通过执行以下操作指定何时呈现JS代码:

1,page.cshtml<script>标签包装到一个区域中并为其命名后,通常使用的名称是“脚本”:

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

2,_Layout.cshtml页面add中@RenderSection("Scripts", required: false),确保在引用Jquery源代码后将其放入,这将使您的JS代码晚于Jquery呈现。


6

如果您在.Net中执行此操作并正确引用了脚本文件,并且jQuery看起来不错,请确保您的用户有权访问脚本文件。我正在研究的项目(同事)的web.config拒绝访问匿名用户。匿名用户可以访问我正在处理的页面,因此他们无权访问脚本文件。将以下内容放入web.config中,一切都正确了:

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

6

就我而言,这是一个错字,我忘记了一个反斜杠,并且错误地引用了源。

之前 src="/scripts/jquery.js"

后    src="scripts/jquery.js"


5

jquery-1.2.6.min.js未调用源文件jQuery命令$()的执行时间早于<..src='jquery-1.2.6.min.js'>

<.. src="/js/jquery-1.2.6.min.js..">首先运行并确保src路径正确,然后执行jquery命令

$(document).ready(function() 

5

这以前发生在我身上。

原因是我要使用JS将android连接到Webview。我发送了一个不带引号的参数。

js.sayHello(hello);

当我将其更改为

js.sayHello('hello');

有效。


我不知道什么参数不带引号意味着...听起来您有参考错误。
Aluan Haddad

我在Freemarker的出现了问题,原因是没有单引号的,所以值处理并不像一个字符串,但作为一个变量
torina

4

您的JavaScript文件丢失,因此发生此错误。只需在<head>标记内添加JavaScript文件即可。参见示例:

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

或在标记中添加以下代码:

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

4

在以下两种情况下也会发生该错误。

  1. HTML文件中缺少@section脚本元素
  2. 访问DOM元素时出错。例如,对DOM元素的访问被称为$(“ js-toggle”)而不是$(“。js-toggle”)。其实这个时期不见了

因此,需要遵循3件事-检查是否添加了必需的脚本,检查是否以必需的顺序添加了该脚本以及Java脚本中的第三种语法错误。


是的 并为id属性$('#someDiv')
cagcak

3

h!我在标签中混用了引号,导致jquery引用中断。在Chrome浏览器中进行的检查使我看到文件未正确链接。


3

就我而言,我忘了包括:

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

早些时候,我只包含了导致此错误的jquery-mobile。


3

我修改了脚本标记以指向正确的内容,并在编辑器中将脚本顺序更改为正确的顺序。但是完全忘记保存更改。


2

我有一个类似的问题,这是因为我在样式表链接上缺少结束符>。


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>

我有类似的问题,你知道吗,这是因为当我在android设备webview中测试时网络断开了,我没有意识到,并且本地js没问题加载,因为它不需要网络。看起来很荒谬,但花了我大约1个小时才弄清楚。


2

您尚未引用jQuery库。

您需要在HTML中包含与此类似的行:

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

2

我有类似的问题。我的测试服务器使用“ http”可以正常工作。但是,使用SSL的生产失败。

因此,在生产中,我添加了“ HTPPS”而不是“ HTTP”,并且在测试中,我保持为“ HTTP”。

测试:

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' ) );

生产:

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' ) );

希望这对从事WordPress的人有所帮助。


1

奇怪的是,我的问题来自PHP。

REST API调用失败,此后又中断了库的加载。由于失败是来自REST调用的,因此没有给我php编译错误。

如果可以加载jquery,也可以将此选项保留为一个选项。


1

我在通过移动热点浏览Internet时遇到了这个问题。它也正在压缩图像,并在body标签底部添加了以下脚本

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

当我连接到正确的wifi连接时,一切似乎都能为我找到。希望这对某人有所帮助。


1

如果存在网络问题,也会发生这种情况。这意味着,即使“ jquery脚本”已经到位,并且在使用之前就包含在内,但由于无法访问jquery脚本,因此在加载页面时,因此对“ $”的定义被视为“未定义的引用”。

测试/调试目的::您可以尝试在浏览器上访问“ jquery-script” URL。如果可以访问,则您的页面应正确加载,否则将显示上述错误(或其他与脚本相关的错误)。示例- 在浏览器(或浏览器上下文姿势)上,应该可以访问http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js

我有类似的问题,其中我可以在Windows主机浏览器中加载html页(使用脚本),但无法在vm-ubuntu中加载。解决网络问题,问题得到解决。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.