解決したいこと
Javaスクリプトを使用してタイマー機能をつけているときにエラーで
Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')
at Object../app/javascript/time.js
を解決したいです。
Javaを勉強しておりまして、クリックした時にタイマーがスタートし、ストップ、リセットできる様にしたいのですがうまくいかないので、お力をお借りしたいです。
Java
1 2const stopwatch = document.getElementById('stopwatch'); 3const start = document.getElementById('start'); 4const reset = document.getElementById('reset'); 5 6let state = 'start'; 7let timerId; 8let elapsedMs = 0; 9 10function timeToString(millis) { 11 const ms = millis % 1000; 12 const s = Math.floor(millis / 1000) % 60; 13 const m = Math.floor(millis / 1000 / 60) % 60; 14 15 const formattedMs = ms.toString().padStart(3, '0'); 16 const formattedS = s.toString().padStart(2, '0'); 17 const formattedM = m.toString().padStart(2, '0'); 18 19 return `${formattedM}:${formattedS}.${formattedMs}`; 20} 21 22start.addEventListener('click', () => { 23 if (state === 'start') { 24 state = 'stop'; 25 start.textContent = 'ストップ'; 26 start.classList.add('stop'); 27 28 let startMs = Date.now(); 29 startMs -= elapsedMs; 30 31 timerId = setInterval(() => { 32 const nowMs = Date.now(); 33 elapsedMs = nowMs - startMs; 34 35 stopwatch.textContent = timeToString(elapsedMs); 36 }, 10); 37 } else { 38 state = 'start'; 39 clearInterval(timerId); 40 start.textContent = 'リスタート'; 41 start.classList.remove('stop'); 42 43 } 44}); 45 46reset.addEventListener('click', () => { 47 state = 'start'; 48 clearInterval(timerId); 49 start.textContent = 'スタート'; 50 start.classList.remove('stop'); 51 elapsedMs = 0; 52 stopwatch.textContent = '00:00.000'; 53}); 54
html
1<div id="stopwatch">00:00.000</div> 2 <div id="buttons"> 3 <button type="button" id="reset" class="button">リセット</button> 4 <button type="button" id="start" class="button">スタート</button> 5 </div> 6 <script src="js/time.js"></script>
どの行でエラーになったかはわかりますか?
そのコードでエラーなく動きましたよ。
それからJavaScriptとJavaはまったくの別物ですので念のため。
タグはJavaScriptになっているのでいいのですが。
ご提示のコードでエラーが再現しません。
https://jsfiddle.net/uL6pcr7s/
ご回答有難うございます。
start.addEventListener('click', () => {
if (state === 'start') {
state = 'stop';
start.textContent = 'ストップ';
start.classList.add('stop');
のstart.addEventListenerでエラーで動作しないのですが。。。自分ので動かない原因など分かりましたら教えてもらえると助かります。
maisumakunさんitagagakiさんご回答有難うございました。無事解決することができました。
また、時間を割いて確かめて頂き有難うございました。もっと学習して知識をつけていきます。
回答1件
あなたの回答
tips
プレビュー