这个答案适用于那些对为什么有时代码有效而有时在将库源放在页面底部时却无效的人。
在我自己沉浸在这个谜团中很长一段时间之后,我把它展示出来了。在这个问题上有两个独立且不同的关注点,一个是关于执行代码,一个是关于加载代码。
只要您在加载页面时不执行任何代码,jquery 源的位置就无关紧要。是的,你没看错,而且绝对正确。
请允许我举例说明;
<script>
$("#emailInput").change(function(){
// perform some operations when a change is detected in the input emailInput
});
</script>
<script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
上面的代码将在页面加载时执行。如您所见$("#emailInput")
,拥有 jquery 选择器是在 jquery 库被加载和执行之前执行的(这是 jquery 将定义 $ 及其所做的所有事情的地方)。这就是导致错误Uncaught ReferenceError: $ is not defined to be throw 的原因。
但是,如果页面加载时代码没有执行,我们不会有任何错误,这也最好用一个例子来说明。
<html>
<head>
<script>
function writeMessage(){
$("#message").html("Surprise ladies!");
}
</script>
</head>
<body>
<button onclick="writeMessage()">Click me</button>
<div id="message"></div>
<script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
</body>
</html>
上面的代码是完整和正确的,所以你可以自己试试看,它工作得很好。这是因为页面加载时该函数writeMessage()
尚未执行。该功能仅在按下按钮时执行;这是在页面加载之后(到那时 jquery 库已经加载并执行)。
我在评论中看到,在这个链接中,代码在加载库后工作。删除在底部找到的jquery src,再次运行它,jquery仍然可以工作!我最好的猜测是,代码使用的是 jsfiddle 网站上提供的库。
我希望这能澄清我们一直生活在其中的谜团。