被jQuery弄糊涂了,当我知道的时候没有找到它'在那里

Confused by jQuery not found when I know it's there

本文关键字:在那里 候没 弄糊涂 jQuery 我知道      更新时间:2023-09-26

我确保像这样验证我对jQuery的引用是正确的。

window.onload = function() {
  console.log($(this));
};

我可以看到非空值。但当我尝试下面的任何一个(上面的部分被注释掉了)时,我会得到错误。

未捕获的ReferenceError:$未定义

//$(document).ready(function () { alert("ready"); });
$(window).onload(function () { alert("onload"); });

我很困惑如何定义和不同时定义它。经过一些谷歌搜索,我发现了几个这样的代码示例,据我所见,它不是文件中的语法。

标记是这样的。

<head>
  ...
  <script src="Stuff.js" type="text/javascript"></script>
</head>
<body>
  ...
  @Scripts.Render("~/bundles/jquery")
</body>

我在Razor下MVC.NET的默认(和工作)模板中看到,它们在头部执行@Scripts.Render("~/bundles/modernizr"),然后在主体底部执行@Scripts.Render("~/bundles/jquery")。我想我可以遵循同样的模式。显然,我失败了。抱歉说不清楚。由于无知导致诊断错误。

您将jQuery的script标记放错了位置。它在您显示的代码的script标记之后,而它应该在之前

它可以被定义和未定义的原因是时间不同。这些对$的引用是在非常不同的时间:

这个:

window.onload = function() {
  console.log($(this));
};

window上的load事件最终触发时,在页面加载周期中发生非常晚,在解析所有HTML、处理所有script标签、加载所有图像等之后。

这些:

//$(document).ready(function () { alert("ready"); });
$(window).onload(function () { alert("onload"); });

当解析器到达它们所在的脚本块时,立即发生,并移交给JavaScript引擎,JavaScript引擎运行该代码。

所以这是可行的:

<script>
window.onload = function() {
    console.log($(this));
};
</script>
<script src="jquery.js"></script>

但这失败了:

<script>
$(document).ready(funtion() {
    alert("ready");
});
</script>
<script src="jquery.js"></script>

不管怎样,这都有效:

<script src="jquery.js"></script>
<script>
$(document).ready(funtion() {
    alert("ready");
});
</script>