$(document).ready(function()不起作用。

30

我正在使用jQuery从Solr服务器获取JSON对象。 当我在Tomcat上运行我的HTML文件时,一切正常,但是当我将其嵌入到正在运行WebLogic的项目中时,会出现以下错误:(通过Firebug进行调试)

$ is not defined
$(document).ready(function(){  

将它嵌入我的项目中时为什么会出现这个错误?

这是我的<head>标签的内容,这是我包含jquery.js的方式:

<head>
  <title>Search Result  </title>
  <style>
    img{ height: 150px; float: left; border: 3;}
    div{font-size:10pt; margin-right:150px;
    margin-left:150px; }
  </style>

  <script type="text/javascript" src="jquery-1.6.1.js"></script>
  <script type="text/javascript">
    $(document).ready(function(){       //Error happens here, $ is not defined.

    });
  </script>
</head>

7
你加载了jQuery吗?你是在自定义JavaScript之前加载它的吗? - igorw
3
请使用jQuery(document).ready(function()代替$(document).ready(function(),我认为这样会起作用。 - Ravichandran Jothi
是的,我已经包含了jquery.js和自定义的JavaScript之前。 - Romi
首先查找 jQuery 文件,如果已加载,则您的代码必须写在 jQuery 加载行之后。 - Vivek
耶!!!这就是问题,意味着你的JS文件没有被包含进来...检查一下你的JS路径。 - Vivek
显示剩余6条评论
11个回答

32

你在head部分加载了jQuery吗?你是否正确地加载了它?

<head>
   <script src="scripts/jquery.js"></script>
   ...
</head>

这段代码假设 jquery.js 文件在 scripts 目录中。(如果您喜欢,可以更改文件名)

您也可以使用由 Google 托管的 jQuery:http://code.google.com/apis/libraries/devguide.html#jquery

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

根据您的评论:

显然,您的Web服务器未配置在请求/webProject/jquery-1.6.1.js时返回jQuery-1.6.1.js。可能有很多原因,例如错误的文件名、文件夹名、路由设置等。您需要创建另一个问题,并更详细地描述您的404(例如本地文件名、操作系统、Web服务器名称和设置)。

同样,您可以使用由Google提供的jQuery(请参见上文),但仍然可能希望找出为什么某些本地文件无法响应请求。


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script> 当我使用这个时,我的代码可以正常运行,这意味着路径存在问题,但我不知道为什么会这样 :O - Romi
1
@Romi,你的URL开头缺少http://https://。没有它,浏览器会在当前文件夹中查找资源。 - Nathan J.B.
或者使用//ajax.googleapis.com来实现这个目的。 - Dan Abramov
不需要在 head 中加载 jQuery,只需在其前面加载 jQuery 即可。 - Pbinder

15

我发现有时候我们需要使用noConflict

jQuery.noConflict()(function ($) { // this was missing for me
    $(document).ready(function() { 

       other code here....

    });
});

从文档中可以得知:

许多JavaScript库使用$作为函数或变量名,就像jQuery一样。在jQuery的情况下,$只是jQuery的别名,因此不使用$也可以使用所有功能。如果您需要在jQuery旁边使用另一个JavaScript库,请通过调用$.noConflict()$的控制权返回给其他库。在jQuery初始化期间保存了$的旧引用;noConflict()仅恢复它们。


已经为我修复了。 - grantespo

6

如果jQuery没有正确加载,您将会收到此错误提示。您可以使用Firebug查看jQuery尝试加载的url,以便检查相对路径是否错误。

另外,您还可以使用$(function(){作为$(document).ready(function(){的简写形式。


3
如果你有一个引用jquery的js文件,可能是因为这个js文件在body中而不是head部分(这就是我的问题)。你应该将js文件移到jquery.js引用之后的head部分。
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.js"></script>
    <script src="myfile.js" type="text/javascript"></script>
</head>
<body>
</body>
</html>

有没有其他方法让它工作,而不是把函数放在头部? - orezvani

0

查看您的JS路径,这可能是问题的原因...因为只有在jQuery未正确加载时才会出现此错误。


0

我刚遇到了这个问题,原因是我试图通过http引入jQuery,而我的页面是以https加载的。


0

你也可以在这个函数中编写你的jQuery代码。 document.addEventListener("DOMContentLoaded",function(),{ },false);


0

我遇到了同样的问题...在http://www.xaluan.com上...但是在登录后,我发现在jQuery运行后,我使用了一个不存在的元素ID来创建一个函数...

例如:

$('#aaa').remove()  <span class="aaa">sss</spam> 

因此,id="aaa" 不存在... 然后 jQuery 就停止运行了... 因为像这样的错误。

0

使用:

jQuery(document).ready(function($){
    // code where you can use $ thanks to the parameter
});

或简短版本:

jQuery(function($){
    // code where you can use $ thanks to the parameter
});

你的代码和问题中的代码有什么区别? - user586399
区别在于我把$定义为参数。这是一个老的答案,但我记得在JQuery中遇到过一个问题,$未定义。现在我猜想使用var $ = jQuery也应该可以解决问题... - Reign.85

0

我在Chrome浏览器中遇到了同样的问题,我的脚本是这样的:

<script src="./scripts/jquery-1.12.3.min.js"></script>
<script src="./scripts/ol-3.15.1/ol.js" />
<script>
...
$(document).ready(function() {
    ...
});
...
</script>

当我改成:

<script src="./scripts/jquery-1.12.3.min.js"></script>
<script src="./scripts/ol-3.15.1/ol.js"></script>

$(document).ready被调用了。


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