JQuery - $未定义

Pau*_*sey 462 javascript asp.net-mvc jquery

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

<script type="text/javascript">
    $(function() {
        $('#post').click(function() {
            alert("test"); 
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

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

<script src="<%=ResolveUrl("~/Scripts/jquery-1.3.2.js")%>" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

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

$未定义

并没有jquery工作.我也尝试了各种各样的变体,如$(document).ready和jQuery等.

它是.net 3.5上的一个MVC 2应用程序,我确定我真的很密集,google上的每个地方都说要检查文件是否正确引用,我已经检查并再次检查,请指教!:/

Mik*_*cic 531

该错误只能由以下三种情况之一引起:

  1. 您的JavaScript文件未正确加载到您的页面中
  2. 你有一个拙劣的jQuery版本.这可能是因为有人编辑了核心文件,或者插件可能覆盖了$变量.
  3. 您在页面完全加载之前运行JavaScript,因此,在jQuery完全加载之前.

您应该检查Firebug 网络面板以查看文件是否实际正确加载.如果没有,它将突出显示为红色并在其旁边显示"404".如果文件正确加载,则表示问题为2.

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

$(document).ready(function () {
  //your code here
});
Run Code Online (Sandbox Code Playgroud)

这将确保在初始化jQuery 之后加载代码.

最后要检查的是确保加载jQuery 之前没有加载任何插件.插件扩展了"$"对象,所以如果你在加载jQuery核心之前加载一个插件,那么你将得到你描述的错误.

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

  • 关于你的代码块,除非你在该语句之前有一个包含jQuery的脚本标记,否则`$(document)`将不起作用... (173认同)
  • (function($){})(jQuery); (19认同)
  • 我想补充一点,我有与OP相同的问题,我的问题是使用https和jquery的库不能很好地工作. (2认同)
  • @Patrik:在视图中使用脚本部分查看我的答案.这样就可以先加载jquery,并正确定义$. (2认同)

小智 196

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

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

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

结果是$未定义

将jquery.js放在脚本标记之前它会起作用;)像这样:

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

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


And*_*len 62

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

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

这可以在HEAD或页面的页脚中,只需确保在尝试调用任何其他jQuery之前加载它.

然后,您需要使用以下两种解决方案之一

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

要么

jQuery(document).ready(function($){
// standard on load code goes here with $ prefix
// note: the $ is setup inside the anonymous function of the ready command
});
Run Code Online (Sandbox Code Playgroud)

请注意多次$(document).ready(function(){// code here}); 不管用.

  • “未定义 jQuery”。然而,它在页面加载后存在。 (2认同)

小智 43

如果jQuery插件调用位于其旁边</body>,并且您的脚本在此之前加载,则应该在window.onload事件之后运行代码,如下所示:

window.onload = function() {
  //YOUR JQUERY CODE
}
Run Code Online (Sandbox Code Playgroud)

`

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

如果你使用它:

$(document).ready(function () {
  //YOUR JQUERY CODE
});
Run Code Online (Sandbox Code Playgroud)

`

$还没有在这个时候确定的,因为jQuery是加载之前它被称为,你的脚本将失败上的控制台,第一道防线.


Geo*_*e R 27

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

type="text/javacsript"
Run Code Online (Sandbox Code Playgroud)

所以他们正在加载,但没有进一步暗示为什么它不起作用.毋庸置疑,正确的拼写修正了它.

  • **版主注**:这篇文章中的拼写错误是*故意的*,为了说明一点。请不要编辑帖子来“纠正”这一点。 (2认同)

ang*_*sen 21

在视图和主布局中使用脚本部分.

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

查看/美孚/ MyView.cshtml:

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

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

        // Do your custom javascript for this view here. Will be run after 
        // loading all the other scripts.            
      });
    </script>
}
Run Code Online (Sandbox Code Playgroud)

查看/共享/ _Layout.cshtml

<html>
<body>
    <!-- ... Rest of your layout file here ... -->

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

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

  • 注意:部分视图不支持视图部分. (2认同)

Wol*_*ahl 11

确保你真的加载jquery这不是 jquery - 这是ui!

  <script language="JavaScript" 
    src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js">
  </script>
Run Code Online (Sandbox Code Playgroud)

这是jquery的正确脚本源:

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


Nav*_*bas 9

如上所述,它发生的原因是$ variable的冲突.

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

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

然后在任何地方使用它

$j( "div" ).hide();
Run Code Online (Sandbox Code Playgroud)

更多细节可以在这里找到


Nes*_*sar 8

这意味着您的jQuery库尚未加载.

您可以在拉动jQuery库后移动代码.

或者你可以使用这样的东西

window.onload = function(){
  // Your code here
};  
Run Code Online (Sandbox Code Playgroud)


tam*_*ler 7

您使用的是其他任何JavaScript库吗?如果是这样,您可能需要在兼容模式下使用jQuery:

http://docs.jquery.com/Using_jQuery_with_Other_Libraries


Mim*_*uni 6

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

<script>
$=jQuery;
</script>
Run Code Online (Sandbox Code Playgroud)

它工作得很好:)

  • 问题是: $ 未定义,不是吗? (4认同)

小智 5

我遇到了同样的问题并通过使用解决了它

document.addEventListener('DOMContentLoaded', () => {
 // code here
});
Run Code Online (Sandbox Code Playgroud)