未捕获的引用错误:$ 未定义

17

当我尝试创建一个jQuery图像轮播时,出现了以下错误信息:

未捕获的引用错误:$未定义

以下是我的新代码(请注意,我已将脚本移动到页面的<head>标签中,这是Adobe建议的方法):

<!doctype html>
<html>

<head>
<meta charset="utf-8">
<title>Green Cold-Formed Steel | Home</title>
<style type="text/css">

body,td,th {
    font-family: Tahoma, Geneva, sans-serif;
    font-size: 10px;
    color: #000;
    text-align: left;
}
body {
    background-color: #999;
}
a:link {
    color: #999;
    text-decoration: none;
}
a:visited {
    text-decoration: none;
    color: #060;
}
a:hover {
    text-decoration: underline;
    color: #FFF;
}
a:active {
    text-decoration: none;
}
h1 {
    font-size: 14px;
    color: #060;
}
h2 {
    font-size: 12px;
    color: #999;
}
h3 {
    font-size: 9px;
    color: #FFF;
}
#next {
    background-image: url(Assets/slideshow/r_arrow.png);
    background-repeat: no-repeat;
    background-position: center center;
    display: block;
    float: right;
    height: 500px;
    width: 100px;
    position: relative;
    z-index: 99;
}
#slideshowwrapper {
    display: block;
    height: 500px;
    width: 1000px;
    margin: auto;
}
#container {
    background-color: #FFC;
    display: block;
    float: left;
    height: 500px;
    width: 1000px;
    overflow: auto;
}
#prev {
    background-image: url(Assets/slideshow/L_arrow.png);
    background-repeat: no-repeat;
    background-position: center center;
    display: block;
    float: left;
    height: 500px;
    width: 100px;
    position: relative;
    z-index: 99;
}
#slider {
    display: block;
    float: left;
    height: 500px;
    width: 1000px;
    overflow: hidden;
    position: absolute;
}
#NavBar {
    display: block;
    height: 50px;
    width: auto;
    position: relative;
    padding-bottom: 5px;
    float: none;
    vertical-align: middle;
}
</style>
</head>

<body bgcolor="#999999" text="#000000">

<table width="100%" height="583" border="0" cellspacing="0" cellpadding="0px">
  <tr>
    <th height="132" align="left" scope="col">&nbsp;</th>
    <th scope="col"><div class="spacer" id="spacer"></div>
      <div class="Header" id="header"><a href="index.html"><img src="Assets/Logo/GFCS_Logo_NoBckgnd.png" width="288" height="108" alt="GCFS"></a></div>
    <hr></th>
    <th scope="col">&nbsp;</th>
  </tr>
  <tr>
    <th width="5%" align="left" scope="col">&nbsp;</th>
    <td width="85%" align="left" valign="top" scope="col">
    <div class="Navigation Bar" id="NavBar"><img src="Assets/navigation/navbutton_static_green.png" width="100" height="50" alt="Navi_Home"> <img src="Assets/navigation/navbutton_static_green.png" width="100" height="50" alt="Navi_Solutions"> <img src="Assets/navigation/navbutton_down.png" width="100" height="50" alt="navi_down"></div>

    <div id="slideshowwrapper">
      <div id="container">
        <div class="controller" id="prev"></div>
        <div id="slider">
            <img src="Assets/slideshow/hyatt_apts.png" width="1000" height="500" alt=           "Hyatt Apartments">
            <img src="Assets/slideshow/mccommas.png" width="1000" height="500" alt="McCommas">
            <img src="Assets/slideshow/park_4200.png" width="1000" height="500" alt="Park 4200">
            <img src="Assets/slideshow/quail_run.png" width="1000" height="500" alt="Quail Run">
            <img src="Assets/slideshow/roofdale.png" width="1000" height="500" alt="Roofdale Roof">
            <img src="Assets/slideshow/tri_truss.png" width="1000" height="500"> </div>
        <div class="controller" id="next"></div>
      </div>
    </div></td>
    <th width="10%" scope="col">&nbsp;</th>
  </tr>
</table>
<p>&nbsp;</p>
<script type="text/javascript" src="JS/jquery-1.10.1.min.js"></script>
<script type="text/javascript" src="JS/jquery.cycle.all.js"></script>
<script>
$(function(){
        $('#slider').cycle({ 
        fx:     'scrollHorz', 
        speed:  'fast', 

        next:   '#next', 
        prev:   '#prev' 
    });
});
</script>
</body>
</html>

我的网站本地JS文件夹的路径如下:C:\Users\Andrew\Desktop\GCFS\JS

尽管我是编程新手,但我想要实现的内容相当简单。据我所知,我不需要一个ready函数,JavaScript应该会自动运行。 感谢您的帮助!

评论中的内容

我尝试过这个,但它也失败了

<title>Green Cold-Formed Steel | Home</title> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script src="JS/jquery.cycle.all.js"></script> 
<script type="text/javascript"> 
 $(function() {  
   $('#slider').cycle({ fx: 'scrollHorz', speed: 'fast', next: '#next', prev: '#prev' });
}); 
</script>

4
你确定 jQuery 1.10 的位置就是你认为的吗? - Blazemonger
是的,我正在使用Dreamweaver创建这个网站,所以文件基本上是“链接”的,代码是由软件为我编写的。 - MasterFuel
清空浏览器缓存并遵循 @Sushanth 的建议。它会工作的!! - writeToBhuwan
也请查看此答案 https://dev59.com/1WEi5IYBdhLWcg3whcri - Aaska Patel
1
可能是Uncaught ReferenceError: $ is not defined?的重复问题。 - Moradnejad
显示剩余2条评论
6个回答

25

解决方法:

1)使用Google CDN加载jQuery

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>

2) 据我所知,Cycle Plugin与jQuery v1.5-v1.7兼容,因为大多数方法已在jQuery 1.8+中弃用。这就是我在第1点中使用v1.5的Google CDN jQuery的原因。Cycle Plugin的大多数示例都使用jQuery 1.5。

3) 清除浏览器缓存,这往往是主要问题。

4) 请使用下面的代码检查jQuery的加载情况。

if(typeof jQuery!=='undefined'){
    console.log('jQuery Loaded');
}
else{
    console.log('not loaded yet');
}

主要修改:

错误原因非常简单:

你在jquery加载之前调用了cycle方法。

在DOM准备就绪后调用循环插件..

$(document).ready(function(){
    $('#slider').cycle({ 
        fx:     'scrollHorz', 
        speed:  'fast', 

        next:   '#next', 
        prev:   '#prev' 
    });  
});

那就是问题所在!非常感谢大家的时间和帮助!你们都是救命恩人! - MasterFuel

9

2个问题。

看起来你的jQuery没有正确加载。

通常会看到这个错误。

Uncaught ReferenceError:$ is not defined

当您的页面未正确包含jQuery时。

尝试使用CDN中的jQuery,这应该可以解决您的问题

替换

<script src="JS/jquery-1.10.1.min.js"></script>

使用CDN中的那个

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

注意: 如果您从文件系统进行测试,则需要将http:添加到上面的URL中,否则会失败

接下来,您的脚本文件位于HTML之前。因此需要将代码包含在DOM Ready处理程序中。

$(function() {
    $('#slider').cycle({ 
        fx:     'scrollHorz', 
        speed:  'fast', 
        next:   '#next', 
        prev:   '#prev' 
    });
});

据我所知,在创建div Id时引用了'Slider'。
不是这样的。如果您的脚本是在body之前包含的,那么您可能不需要将其包含在Ready处理程序中。但在您的情况下,它存在于head中。因此,当脚本开始运行时,该特定元素仍未出现在DOM中。 查看Fiddle

尝试了你的帮助后,我仍然没有看到积极的结果。<title>绿色冷弯型钢 | 主页</title> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> <script src="JS/jquery.cycle.all.js"></script> <script type="text/javascript"> $(function() { $('#slider').cycle({ fx: 'scrollHorz', speed: 'fast',
next: '#next', prev: '#prev' }); }); </script>
- MasterFuel
是的,这只是一堆代码... 如果您已更改代码,应该修改上面的问题。 - benastan
你在评论中的代码无法运行的原因很可能是因为你是从你的文件系统进行测试的。当你这样做时,你必须在//ajax.....前面加上http:。既然这个答案是正确的并且最先出现,你应该接受它。 - mplungjan

4

可能有两个问题:

1) JQuery可能未能正确加载。你可以使用Chrome进行测试。键入$或jQuery来检查它是否被正确加载。 Chrome Console

2) 根据我的经验,在一些已经与其他JS库捆绑的JQuery.js中,将不支持$,您必须强制使用jQuery而非$ 请检查您在项目中加载的js文件中的以下行。

window.jQuery = window.$ = jQuery;

我发现使用 http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js 对我没有用,但我使用了 http://code.jquery.com/jquery-1.7.2.min.js

以下是您的代码中唯一我编辑过的部分,它对我起作用了。

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>

正如@Rag所提到的,我用jQuery替换了$,错误不再出现,但脚本仍未运行。当我在控制台中运行它时,返回一个错误,即jQuery未定义。 - MasterFuel
当然,现在我的错误是ReferenceError: jQuery未定义。非常感谢大家的耐心和善良,我知道自己在这方面很蠢。但我正在尽力学习,你们真的很擅长自己的工作! - MasterFuel
你能否编辑上面发布的问题并更新最新的代码? - Raghav
我发现使用 http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js 对我没有用,但是我使用了 http://code.jquery.com/jquery-1.7.2.min.js。可能支持还没有扩展到1.10.1,不确定。 - Raghav

3
作为补充说明,如果你在.js文件中使用$(Jquery),那么所有的库或框架都应该在该.js文件之前引入。
<script type="text/javascript" src="jquery-2.1.3.min.js"></script>
<script type="text/javascript" src="app.js"></script>

是的,先加载jQuery CDN,然后再加载你的自定义JS文件。 - Francislainy Campos

0

我用谷歌的Jquery库链接替换了我的头文件,因为每次加载页面时都会加载它,所以它立即起作用了。

    <script type="text/JavaScript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

0
我曾经遇到过这个问题,但原因与上述情况非常不同。 我的网站在除了旧版Android(2.2)之外的所有地方都能正常工作。 结果发现,这个设备拒绝了code.jquery.com CDN上的https证书,因此无法加载JQuery。解决方法是改为从https Google CDN加载JQuery资源(使用其他人提供的URL命名)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接