この回答は、ライブラリ ソースをページの下部に配置したときに、コードが機能する場合と機能しない場合がある理由が不明な人向けです。
このミステリーにかなり長い間関わった後、私はそれを特集しました。この問題には 2 つの別個の懸念事項があります。1 つはコードの実行に関するもので、もう 1 つはコードのロードに関するものです。
ページの読み込み時にコードを実行しない限り、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 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のWebサイトで入手できるライブラリを使用していることです。
これにより、私たち全員が生きてきた謎が明らかになることを願っています。