当jQuery知道它时,jQuery感到困惑

时间:2016-01-04 13:31:42

标签: javascript jquery

我确保验证我对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")。我想我可以遵循相同的模式。显然,我失败了。很抱歉不清楚。由于无知而导致诊断不正确。

1 个答案:

答案 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>