我确保验证我对 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/