未捕获的ReferenceError:$未定义?

Oli*_*ers 620 javascript jquery referenceerror

为什么这段代码会抛出一个

未捕获的ReferenceError:$未定义

什么时候可以呢?

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

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

标头中引用了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>
Run Code Online (Sandbox Code Playgroud)

Jer*_*emy 661

您应该首先将引用放到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>
Run Code Online (Sandbox Code Playgroud)

  • 为了确保这一点很清楚:你不能在jquery脚本本身之前将脚本引用放到jquery-ui.这就是我解决问题的方法:首先是jquery-xxxmin.js,然后是jquery-ui-xxxxxx.js. (26认同)
  • 2年后,答案仍未"勾选")[**本文**](http://jquery-howto.blogspot.com/2013/02/referenceerror-jquery-is-not-defined.html)描述了发生此错误时的这种情况和4种常见情况. (23认同)
  • @Uzbekjon 快十年了,它仍然没有被勾选。感谢您提供文章链接。 (3认同)
  • @Uzbekjon那为我解决了.在我的`HTML`文件的_one_中,脚本的路径是错误的. (2认同)

小智 216

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

  • @RamSharma实际上,这是正确的答案.您不需要任何其他方法来解决问题. (26认同)
  • 这并没有提供问题的答案.要对作者进行批评或要求澄清,请在帖子下方留言. (11认同)
  • 那么解决办法是什么呢? (5认同)

小智 114

这就是为我解决的问题.最初我去了谷歌并在他们的CDN页面上复制并粘贴了他们建议的jQuery片段:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

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

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

然后它奏效了.

  • 严格来说,Google代码段/示例是正确的 - 他们的src属性是一个协议较少的URL,这意味着浏览器应该使用调用页面的协议(HTTP/HTTPS).见http://www.paulirish.com/2010/the-protocol-relative-url/.如果您的页面曾经通过SSL提供而脚本不是,那么这是避免混合内容警告的最佳做法. (13认同)
  • 这里的一个常见问题是,在开发过程中使用协议相对URL,在阳光明媚的日子,您尝试从本地文件加载页面.您的浏览器将乐观地尝试加载`file:// ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js`,您想知道为什么它不会出现在网络控制台中. (12认同)

Jna*_*jan 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>
Run Code Online (Sandbox Code Playgroud)

或任何jQuery插件.然后把你的自定义脚本文件链接或代码:

<script src="js/custom.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

  • `如果在jQuery插件加载到浏览器之前加载了自定义脚本,那么这种类型的问题可能会出现`完美的答案..在我的情况下脚本是在页脚中 (3认同)

小智 38

在我的情况下,我把我的.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>
Run Code Online (Sandbox Code Playgroud)


Sud*_*jee 26

好吧,我的问题不同了 - 它是Chrome中的Document Security模型.

看看这里的答案,显然我在调用$(document).ready()等函数之前不知何地加载了我的jquery文件.但是,他们都处于正确的位置.

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

编辑:另一种方法是将所有CDN托管的内容链接为https://而不是http:// - 然后模型不会抱怨.

  • 另请注意,您可以将协议保留在链接之外,并根据上下文选择合适的协议(假设存在http和https版本).请参见http://stackoverflow.com/a/3622615/4332 (5认同)

lal*_*mar 23

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

谷歌:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

微软

<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

jQuery的

如果你想要任何其他Jquery cdn版本,请检查此链接.

在这之后:

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

WordPress的:

<script type="text/javascript">
var $ = jQuery;
jQuery(document).ready(function($){
     //your stuff
});
</script>
Run Code Online (Sandbox Code Playgroud)


xox*_*k4n 19

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

$(document).ready(function() {
Run Code Online (Sandbox Code Playgroud)

jQuery(document).ready(function($){
Run Code Online (Sandbox Code Playgroud)

或添加

var $ = jQuery;
Run Code Online (Sandbox Code Playgroud)

之前

$(document).ready(function() {
Run Code Online (Sandbox Code Playgroud)


cro*_*ked 15

我有完全相同的问题,上面的这些解决方案都没有帮助.但是,我只是将.css文件链接到文件之后.js,问题奇迹般地消失了.希望这可以帮助.

  • 首先,为了获得更好的页面渲染性能,您应始终在JS文件之前链接CSS文件.其次,css和js文件的顺序应该对当前的cituation没有影响. (12认同)
  • "解决问题的方法不应该解决您的问题,而且您不应该解决问题." (10认同)

Sin*_*Þór 14

我可能是唯一一个遇到过我的问题的人,但无论如何都不好意思.我想尝试使我的脚本异步,只是为了它的乐趣.然后我忘记了它,当我上线时,[custom] .js文件只在jQuery.js之前加载了50%的时间.

所以我改变了

<script async src="js/script.js"></script>
Run Code Online (Sandbox Code Playgroud)

<script src="js/script.js"></script>
Run Code Online (Sandbox Code Playgroud)

:)


Yan*_*ran 13

在我的情况下,我有这个referenceError,因为脚本调用的顺序是错误的.通过更改顺序解决了这个问题:

<script src="js/index.js"></script>
<script src="js/jquery-1.10.2.js"></script>
Run Code Online (Sandbox Code Playgroud)

<script src="js/jquery-1.10.2.js"></script>
<script src="js/index.js"></script>
Run Code Online (Sandbox Code Playgroud)


小智 8

将最新的 jquery cdn 放在主 html 页面的顶部

就像如果你的主 html 页面是index.html

像这样将 jquery cdn 放在这个页面的顶部

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $("button").click(function(){
    $("h2").hide();
  });
});
</script>
</head>
<body>

<h2>This will hide me</h2>


<button>Click me</button>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)


Mos*_*ker 8

在使用 $ 或 jQuery 的脚本之前添加 jQuery 库,以便可以在脚本中识别 $。删除头上的标记脚本并结束 bady

 <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

然后首先在文件js中编写脚本添加

/*global $ */
$(document).ready(function(){  });
Run Code Online (Sandbox Code Playgroud)


小智 8

首先将jQueryCDN(或jQueryref)包含在索引文件中。在包含您的 JS 文件之前,以确保我们正在访问jQuery. 以下几行对我有用

可以参考以下链接参考站点对此有一个清晰的了解:

https://www.tutorialrepublic.com/faq/how-to-fix-dollar-is-not-defined-error-in-jquery.php

答案:在 jQuery 库加载后执行代码
错误“Uncaught ReferenceError: $ is not Defined”背后最常见的原因是在 jQuery 库文件加载之前执行 jQuery 代码。因此,请确保仅在 jQuery 库文件加载完成后才执行 jQuery 代码。


May*_*zer 7

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

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

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

@section scripts {
    <script>
        // JS code...
    </script>
}
Run Code Online (Sandbox Code Playgroud)

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


per*_*ija 6

如果您在.Net中执行此操作并正确引用脚本文件并且jQuery看起来很好,请确保您的用户可以访问脚本文件.我正在进行的项目(同事)让他们的web.config拒绝访问匿名用户.我正在处理的页面可供匿名用户访问,因此他们无法访问脚本文件.将以下内容放入web.config中,一切都在世界上:

  <location path="Scripts">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
Run Code Online (Sandbox Code Playgroud)


use*_*622 6

我遇到了同样的问题,我通过将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>
Run Code Online (Sandbox Code Playgroud)

希望将来能对您有所帮助。


Den*_*nis 5

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

之前 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() 
Run Code Online (Sandbox Code Playgroud)


Rei*_*erd 5

这件事发生在我之前.

原因是我将android连接到带有JS的webview.我发送了一个没有引号的参数.

js.sayHello(hello);
Run Code Online (Sandbox Code Playgroud)

当我改变它

js.sayHello('hello');
Run Code Online (Sandbox Code Playgroud)

有效.


use*_*115 5

我有类似的问题。我的测试服务器在“http”上运行良好。然而,它在具有 SSL 的生产环境中失败了。

因此,在生产中,我添加了“HTTPPS”而不是“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' ) );
Run Code Online (Sandbox Code Playgroud)

生产:

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' ) );
Run Code Online (Sandbox Code Playgroud)

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


小智 5

以下两种情况也会出现该错误。

  1. HTML 文件中缺少 @section 脚本元素
  2. 访问 DOM 元素时出错。例如,DOM 元素的访问被称为 $("js-toggle") 而不是 $(".js-toggle")。事实上,时期缺失了

因此需要遵循 3 件事 - 检查所需的脚本是否已添加、检查是否按所需的顺序添加以及 Java 脚本中的第三个语法错误。