javascript - 当我知道 jQuery 存在时却找不到它,这让我很困惑

标签 javascript jquery

我确保验证我对 jQuery 的引用是否正确。

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

我看到非空值。但是当我尝试以下任何操作(上面的部分被注释掉)时,我收到错误。

Uncaught ReferenceError: $ is not defined

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

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

标记就像这样。

<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));
};

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

这些:

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

当解析器到达它们所在的脚本 block 时立即发生,将其交给 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>

关于javascript - 当我知道 jQuery 存在时却找不到它,这让我很困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34592334/

相关文章:

javascript - 使用正则表达式检查复选框

javascript - 一个<选项>有多个值

javascript - jQuery slideToggle 方向!异常行为

javascript - 满足条件时无法阻止表格

javascript - jQuery 从嵌套删除图像中获取 li

javascript - 对象键循环不在 React 中呈现

javascript - NodeJS 抛出非法指令 : 4 on Mac OS

javascript - 将变量分配给另一个变量时强制单向绑定(bind)

javascript - 数组值检查 JavaScript 中是否出现(使用箭头函数?)

javascript - 以 "jQuery(function..."开头包装 jQuery block 与以 "})(jQuery);"结尾包装 jQuery block 之间的区别