关于javascript:JQuery – $未定义

JQuery - $ is not defined

我有一个简单的jquery点击事件

1
2
3
4
5
6
<script type="text/javascript">
    $(function() {
        $('#post').click(function() {
            alert("test");
        });
    });

以及在site.master中定义的jquery引用

1
<script src="<%=ResolveUrl("~/Scripts/jquery-1.3.2.js")%>" type="text/javascript">

我已经检查了脚本是否被正确解析,我能够在Firebug中看到标记并直接查看脚本,所以必须找到我。但是,我仍然得到:

$ is not defined

而且jquery都不起作用。我还尝试过这方面的各种变体,比如$(document).ready和jquery等。

这是一个在.NET 3.5上的MVC 2应用程序,我确信我真的很密集,谷歌上的每一个地方都说要检查文件是否被正确引用,我已经检查过了,请告知!:


该错误只能由以下三种情况之一造成:

  • 您的javascript文件未正确加载到页面中
  • 您有一个错误的jquery版本。这可能是因为有人编辑了核心文件,或者插件可能覆盖了$variable。
  • 在页面完全加载之前,以及在jquery完全加载之前,您已经运行了javascript。
  • 您应该检查Firebug网络面板,看看文件是否被正确加载。如果没有,它将突出显示为红色,并在旁边显示"404"。如果文件加载正确,这意味着问题是2号。

    确保所有jquery javascript代码都在代码块内运行,例如:

    1
    2
    3
    $(document).ready(function () {
      //your code here
    });

    这将确保在初始化jquery之后加载代码。

    最后要检查的一件事是,在加载jquery之前,确保没有加载任何插件。插件扩展了"$"对象,因此,如果在加载jquery核心之前加载插件,那么您将得到所描述的错误。

    注意:如果您加载的代码不需要运行jquery,则不需要将其放在jquery就绪处理程序中。该代码可以使用document.readyState分隔。


    可能是在调用jquery脚本之前调用了脚本标记。

    1
    2
    3
    <script type="text/javascript" src="js/script.js">

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

    未定义结果为$

    将jquery.js放在脚本标记之前,它将工作;)如下所示:

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

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


    首先,您需要确保jquery脚本已加载。这可能来自cdn或您网站上的本地。如果在尝试使用jquery之前没有先加载这个,它会告诉您jquery没有定义。

    1
    <script src="jquery.min.js">

    这可能在页面的头部或底部,只需确保在调用任何其他jquery内容之前加载它。

    然后你需要使用下面两个解决方案中的一个

    1
    2
    3
    4
    5
    (function($){
    // your standard jquery code goes here with $ prefix
    // best used inside a page with inline code,
    // or outside the document ready, enter code here
     })(jQuery);

    1
    2
    3
    4
    jQuery(document).ready(function($){
    // standard on load code goes here with $ prefix
    // note: the $ is setup inside the anonymous function of the ready command
    });

    请注意,很多时候$(document).ready(function()//code here)都不起作用。


    如果jquery插件调用位于旁边,并且在此之前加载了脚本,则应使代码在window.onload事件之后运行,如下所示:

    1
    2
    3
    window.onload = function() {
      //YOUR JQUERY CODE
    }

    `

    因此,只有在窗口加载之后,当所有资产都已加载时,代码才会运行。在这一点上,将定义jquery($)。

    如果您使用它:

    1
    2
    3
    $(document).ready(function () {
      //YOUR JQUERY CODE
    });

    `

    此时还没有定义$,因为它是在jquery加载之前调用的,您的脚本将在控制台的第一行失败。


    我做了同样的事情,发现我有很多

    1
    type="text/javacsript"

    所以他们正在加载,但没有进一步的提示为什么它不能工作。不用说,正确的拼写可以解决这个问题。


    使用视图和主布局中的脚本部分。

    将视图中定义的所有脚本放在视图的脚本部分中。这样,您就可以在加载所有其他脚本之后让主布局加载这个脚本。这是启动新MVC5 Web项目时的默认设置。不确定早期版本。

    视图/foo/myview.cshtml:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // The rest of your view code above here.

    @section Scripts
    {
        // Either render the bundle defined with same name in BundleConfig.cs...
        @Scripts.Render("~/bundles/myCustomBundle")

        // ...or hard code the HTML.
        <script src="URL-TO-CUSTOM-JS-FILE">

        <script type="text/javascript">
          $(document).ready(function () {

            // Do your custom javascript for this view here. Will be run after
            // loading all the other scripts.            
          });
       
    }

    视图/共享/u layout.cshtml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <html>
    <body>
        <!-- ... Rest of your layout file here ... -->

        @Scripts.Render("~/bundles/jquery")
        @Scripts.Render("~/bundles/bootstrap")
        @RenderSection("scripts", required: false)
    </body>
    </html>

    注意脚本部分如何最后在主布局文件中呈现。


    确保确实加载了jquery这不是jquery-它是用户界面!

    1
    2
      <script language="JavaScript"
        src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js">

    这是jquery的正确脚本源:

    1
     <script language="JavaScript"  src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js">

    如上所述,它是由于$variable的冲突而发生的。

    我通过为jquery保留一个没有冲突的辅助变量来解决这个问题。

    1
    var $j = jQuery.noConflict();

    然后在任何地方使用它

    1
    $j("div" ).hide();

    更多详细信息可在此处找到


    您是否在使用其他的javascript库?如果是这样,您可能需要在兼容模式下使用jquery:

    http://docs.jquery.com/将"jquery"与"其他"库一起使用


    这意味着您的jquery库尚未加载。

    您可以在拉出jquery库后移动代码。

    或者你可以用这样的东西

    1
    2
    3
    window.onload = function(){
      // Your code here
    };


    当我拼错jquery引用而不是type="text/javascript"时,我收到了相同的错误消息,我键入了"…javascirpt"。;)


    听起来jquery没有正确加载。您使用的是哪个源/版本?

    或者,它可能是名称空间冲突,因此尝试显式使用jquery,而不是使用$。如果可以,您可以使用noConflict来确保使用$的其他代码不会中断。


    经过一些测试,我找到了一个快速的解决方案,您可以在索引页顶部添加:

    1
    $=jQuery;

    它工作得很好:)


    该错误意味着jquery尚未加载到页面上。使用$(document).ready(...)或其任何变体都没有好处,因为$是jquery函数。

    使用window.onload应该在这里起作用。注意,只有一个函数可以分配给window.onload。为了避免丢失原始的onload逻辑,可以这样修饰原始函数:

    1
    2
    3
    4
    5
    6
    7
    originalOnload = window.onload;
    window.onload = function() {
      if (originalOnload) {
        originalOnload();
      }
      // YOUR JQUERY
    };

    这将执行最初分配给window.onload的函数,然后执行// YOUR JQUERY

    请参阅https://en.wikipedia.org/wiki/decorator_pattern了解有关decorator模式的更多详细信息。


    在解决方案中提到-"最后要检查的一件事是,在加载jquery之前,确保没有加载任何插件。插件扩展了"$"对象,因此,如果在加载jquery核心之前加载插件,那么您将得到所描述的错误。

    为了避免这个-

    许多JavaScript库使用$作为函数或变量名,就像jQuery那样。在jquery的情况下,$只是jquery的别名,因此所有功能都不使用$。如果我们需要在jquery旁边使用另一个javascript库,我们可以通过调用$.noconflict()将$back的控件返回给另一个库:


    我使用url.content,而且从来没有问题。

    1
    <script src="<%= Url.Content ("~/Scripts/jquery-1.4.1.min.js") %>" type="text/javascript">

  • 检查jquery文件的确切路径。


    我有同样的问题,因为我对jquery.js的引用不在标记中。一旦我换了那个,一切都开始工作了。

    安东尼


    我有同样的问题,没有任何案例能解决我的问题。唯一对我有用的是,它放在site.master文件的下面:

    1
    2
    <script src="<%= ResolveUrl("~/Scripts/jquery-1.7.1.min.js") %>" type="text/javascript">
    <script src="<%= ResolveUrl("~/Scripts/bootstrap/js/bootstrap.min.js") %>" type="text/javascript">

    使用src="<%=resolveurl(")…内容页中jquery的加载是正确的。


    我也遇到了同样的问题,不知道是什么引起的。我最近将HTML文件从日语转换为UTF-8,但我对脚本文件没有做任何处理。不知为什么jquery-1.10.2.min.js在这个过程中被破坏了(我仍然不知道怎么做)。将jquery-1.10.2.min.js替换为原来的修复版本。


    在ASP.NET中使用jquery时,如果使用的是母版页,并且要在其中加载jquery源文件,请确保在所有jquery脚本引用之后都有头ContentPlaceholder。

    我遇到了一个问题,任何使用该母版页的页面都会返回"$is not defined",这仅仅是因为错误的顺序使客户端代码在jquery对象创建之前运行。因此,请确保您有:

    1
    2
    3
    4
    <head runat="server">
        <script type="text/javascript" src="Scripts/jquery-VERSION#.js">
        </asp:ContentPlaceHolder>
    </head>

    这样,代码将按顺序运行,并且您将能够在子页面上运行jquery代码。


    在我的例子中,我指的是Google托管的jquery。它被正确地包含,但是我在一个HTTPS页面上,并通过HTTP调用它。一旦我解决了问题(或者允许不安全的内容),它就会立即启动。


    我有一个非常相似的问题。在我的C_MVC应用程序中,没有识别jQuery。我需要将@scripts.render("~/bundles/jquery")从layout.cshtml文件的底部移动到节的头部。如果您使用的是Visual Studio,请确保您已将jquery作为nuget包获取!

    1
    2
    3
    <head>
        @Scripts.Render("~/bundles/jquery")
    </head>

    有一种方法可以让它在其余代码运行之前自动加载javascript。

    进入viewssharedu layout.html并添加以下内容

    1
    2
    3
    4
    <head>
      <*@ Omitted code*@>
      <script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript">
    </head>

    如果您将jquery.js文件定位在同一文件夹下或HTML文件所在的某些子文件夹中,那么Firebug问题就会得到解决。例如,如果您的HTML在C:/folder1/下,那么您的JS文件应该在C:/folder1/(或C:/folder1/folder2等)下,并在HTML文档中相应地进行寻址。希望这有帮助。


    如果script标记具有defer属性,则显示错误。

    Uncaught ReferenceError: $ is not defined

    必须从script标记中删除属性defer


    我们有同样的问题……但我意外地检查了文件夹属性并设置了一些…

    您必须检查正在访问的每个文件夹的属性。

  • 右键单击文件夹
  • "权限"选项卡
  • 设置文件夹访问权限:所有者:创建和删除文件组:访问文件其他:访问文件
  • 我希望这就是解决办法……


    在尝试了这里的所有操作之后,没有任何结果,我只是通过将script src标记从body移到head来解决了这个问题。


    你只需在页面开头添加

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

    并在任何浏览器地址栏中检查您的SRC链接,如果您得到了一些代码,这将对您有效。阿西