JQuery - $ 未定义

IT技术 javascript jquery asp.net-mvc
2021-01-07 15:54:28

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

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

和在 site.master 中定义的 jquery 引用

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

我已经检查过脚本是否被正确解析,我可以直接在 firebug 中看到标记和查看脚本,所以我一定是被找到了。但是,我仍然得到:

$ 未定义

并且没有一个 jquery 有效。我也尝试过类似$(document).ready和 jQuery 等的各种变体

这是 .net 3.5 上的 MVC 2 应用程序,我确定我真的很密集,谷歌上到处都说要检查文件是否被正确引用,我已经检查并再次检查,请指教!:/

6个回答

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

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

首先,确保正确调用了什么脚本,它应该看起来像

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

并且不应具有asyncdefer属性

然后您应该检查Firebug 网络面板以查看文件是否确实被正确加载。如果没有,它将突出显示为红色,并在旁边显示“404”。如果文件加载正确,这意味着问题是 2。

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

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

这将确保您的代码jQuery 初始化加载

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

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

(函数($){})(jQuery);
2021-02-27 15:54:28
我想补充一点,我和 OP 有同样的问题,我的问题是在 jquery 的库中使用 https 效果不佳。
2021-02-28 15:54:28
@Patrik:请参阅我在视图中使用脚本部分的解决方案的答案。这样 jquery 将首先加载并正确定义 $ 。
2021-03-05 15:54:28
关于您的代码块,$(document)除非您在该语句之前有一个包含 jQuery 的脚本标记,否则它也不会工作......
2021-03-06 15:54:28
检查脚本上是否也有异步,这就是导致我遇到问题的原因。
2021-03-07 15:54:28

可能是在调用 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>

这导致 $ 未定义

把 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>
添加到您的答案中。在 ASP.net 中你可以进入 Shared_Layout.cshtml ` <head> </head> `
2021-02-13 15:54:28
啊啊啊啊啊啊啊啊啊!我花了将近一个星期(每晚大约一个小时)想知道我做错了什么(并尝试另一个修复)!!再次感谢 :)
2021-02-13 15:54:28
请更新答案以使用 HTTPS 并考虑使用 SPI devdocs.io/html/attributes#integrity-attribute
2021-02-22 15:54:28
这是一个很好的回应。我试过了,它对我有用。我正在使用 VS 2013 和 ASP.net。您知道如何在 asp.net 中自动加载页面之前加载 javascript 吗,或者我是否必须在所有文件中以这种方式引用 javascript?
2021-02-23 15:54:28
@pat 并确保将代码写入@section Scripts标签中
2021-02-26 15:54:28

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

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

这可能在页面的 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); 

或者

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}); 不管用。

不用担心,Paul,我已经编辑了解决方案以包含“您必须...首先加载”。:)
2021-02-09 15:54:28
抱歉,我认为这是一种您可以按任何顺序使用脚本的技术。是的,我在 MVC 风格的 body 部分使用了它。mycode.js 然后 jQuery.js 是页面上的最后两件事。
2021-02-11 15:54:28
“未定义 jQuery”。然而,它在页面加载后存在。
2021-02-22 15:54:28
这是否解决了“我的脚本按正确顺序排列但脚本以不同顺序加载”的问题。我记得 4 年前做过这样的事情,但我不记得它解决了什么问题。
2021-03-07 15:54:28
不确定这是一个问题还是一个陈述,但是,在您尝试使用它之前,我会检查您是否调用了 jQuery 脚本。这听起来像是你在页脚中加载它并在页面更高的地方调用它。
2021-03-08 15:54:28

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

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

`

因此,您的代码将仅在窗口加载后,当所有资产都已加载时运行。到那时,$将定义jQuery ( )。

如果你使用它:

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

`

此时$尚未定义,因为它在加载 jQuery 之前被调用,并且您的脚本将在控制台的第一行失败。

注意:记住你只能分配一个 window.onload 函数,如果你给它分配另一个函数,前面的将不会被执行。
2021-02-09 15:54:28
通常,绑定到 window.unload 是个坏主意。这将是唯一运行的事件!!!
2021-03-03 15:54:28

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

type="text/javacsript"

所以他们正在加载,但没有进一步暗示为什么它不起作用。不用说,正确的拼写修复了它。

版主注:这个帖子中的错字是故意的,以说明一点。请不要编辑帖子以“纠正”这一点。
2021-03-05 15:54:28