お世話になります。
HTMLファイルでJavaScriptの<scripnt>の書く位置について分からないことがあり質問させていただきました。
以下のコードはボタンのクリックでasideを開閉させるために作ったものです。
これはスムーズに動きます。
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8 <style> 9 #a_and_aside{ 10 display: flex; 11 } 12 aside{ 13 width: 0px; 14 height: 600px; 15 border: 1px solid #000; 16 transition: all 0.5s; 17 overflow: hidden; 18 } 19 aside.aside_open{ 20 width: 200px; 21 } 22 .btn01{ 23 display: block; 24 position: relative; 25 width: 200px; 26 height: 50px; 27 border: 1px solid #000; 28 text-decoration: none; 29 } 30 </style> 31//①<style>終了後 32</head> 33<body> 34//②<body>タグの直後 35 <div id="a_and_aside"> 36 <aside>test</aside> 37 <a href="#" class="btn01"> 38 このボタンでasideが開く 39 </a> 40 </div> 41 42 <script>//この<script>~</script>を、 43 const aside = document.querySelector('aside'); 44 const btn01 = document.querySelector('.btn01'); 45 46 btn01.addEventListener('click', 47 function(){ 48 aside.classList.toggle('aside_open'); 49 } 50 ); 51 </script> 52 53</body> 54</html>
質問はこの<script>~</script>の位置を①<style>終了後 や、②<body>タグの直後 に移動するとJavaScriptが動作しなくなり、コンソールのエラーが
『Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')』と表示されます。
私は今までJavaScriptは①<style>終了後 や、②<body>タグの直後 に書いても動作すると思っていました。また、今調べたサイトでも<script>の位置によって動作しなくなるといったものは見つけられませんでした。
書く位置によって動作しなくなる場合があるのでしょうか?
どなたかこの挙動の理由が分かる方、回答よろしくお願いしますm(__)m

回答3件
あなたの回答
tips
プレビュー