我确保验证我对jQuery的引用是否正确。
window.onload = function() {
console.log($(this));
};
我看到非空值。但是,当我尝试下面的任何一个(上面注释掉的部分)时,我得到了错误。
未捕获的ReferenceError:$未定义
//$(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")
。我想我可以遵循相同的模式。显然,我失败了。很抱歉不清楚。由于无知而导致诊断不正确。
答案 0 :(得分:3)
您在错误的地方拥有jQuery的script
标记。它是之后所显示代码的script
标记,而之前 。
可以定义和未定义的原因是时间不同。对$
的引用处于非常不同的时间:
这一个:
window.onload = function() {
console.log($(this));
};
在页面加载周期中发生非常晚,解析了所有HTML后,处理了所有script
标记,加载了所有图像等等{{1 load
上的事件终于触发了。
这些:
window
当解析器到达他们所在的脚本块时,立即发生 ,移交到JavaScript引擎,JavaScript引擎运行该代码。
所以这会奏效:
//$(document).ready(function () { alert("ready"); });
$(window).onload(function () { alert("onload"); });
但这失败了:
<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>