laravel8.0で勤怠管理システムを作成しています。ど素人です。
html,css,javascriptで、勤怠管理の打刻機能のフロント側の処理をつくっているのですが、
javascriptが思ったように機能してくれません。
具体的には、"勤務開始"のボタンを押した後、"勤務終了"と"休憩開始"のボタンを押せるようにしたいのですが、アクティブにはなるものの、それらのボタンを押してもなんの変化もありません。
下記にコードを載せます。
HTML、CSS部分
※上手く処理されるか分からないところはコメントアウトしています。
基本的なところから上手くいきません。
<html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> * { font-weight: bold; } .character { color: #222222; } a { text-decoration: none; color: inherit; } .header { display: flex; justify-content: space-between; align-items: center; height: 70px; padding: 0 30px; } .nav_list { display: flex; list-style: none; } .nav_item:not(:last-child) { margin-right: 30px; } .container { background-color: whitesmoke; margin: 0 auto; width: 100vw; height: 80vh; position: relative; } .greeting { position: absolute; top: 5%; left: 50%; transform: translate(-50%, 0); margin: 20px auto; } .button { display: inline-block; background-color: white; width: 300px; height: 100px; padding: 20px 40px; position: absolute; top: 50%; left: 50%; display: flex; justify-content: center; align-items: center; margin: 10px auto; border-style: none; } .start_working { color: whitesmoke; transform: translate(-105%, -110%); } .end_working { color: whitesmoke; transform: translate(5%, -110%); } .start_breaketime { color: whitesmoke; transform: translate(-105%, 10%); } .end_breaketime { color: whitesmoke; transform: translate(5%, 10%); } .start_working.active { color: #222222; } .end_working.active { color: #222222; } .start_breaketime.active { color: #222222; } .end_breaketime.active { color: #222222; } .footer { display: flex; justify-content: center; margin: 10px; } </style> <title>Document</title> </head> <body> <header class="header character"> <h1>Atte</h1> <nav class="nav"> <ul class="nav_list"> <li class="nav_item"><a href="/">ホーム</a></li> <li class="nav_item"><a href="/date">日付一覧</a></li> <li class="nav_item"><a href="">ログアウト</a></li> </ul></nav> </header> <main> <div class="container"> <p class="greeting character">{{$user->name}}さんお疲れ様です!</p> <!--<form action="/" method="post">--> <button class="button start_working active" name="sw"><p>勤務開始</p></button> <button class="button end_working" name="ew"><p>勤務終了</p></button> <button class="button start_breaketime" name="sb"><p>休憩開始</p></button> <button class="button end_breaketime" name="eb"><p>休憩終了</p></button> <!--</form>--> </div> </main> <footer class="footer character"> <small>Atte,inc.</small> </footer> (末尾省略) コード
JavaScript部分
const buttons = document.getElementsByClassName('button'); for (let i = 0; i < buttons.length; i++) { if (buttons[i].classList.contains("active")) { if (buttons[i].classList.contains("start_working") || buttons[i].classList.contains("end_breaketime")) { buttons[i].addEventListener('click', goAwayFromWork); } else /*if (buttons[i].classList.contains("end_working") || buttons[i].classList.contains("start_breaketime"))*/ { //if (i == 1) { buttons[i].addEventListener('click', endWorking); //} else if (i == 2) { //buttons[i].addEventListener('click', startBreaketime); //} } } } function goAwayFromWork() { this.classList.remove('active'); document.getElementsByClassName('end_working')[0].classList.add('active'); document.getElementsByClassName('start_breaketime')[0].classList.add('active'); }; function endWorking() { this.classList.remove('active'); document.getElementsByClassName('start_working')[0].classList.add('active'); }; function startBreaketime() { this.classList.remove('active'); document.getElementsByClassName('end_breaketime')[0].classList.add('active'); }; </script> コード
どこがおかしいのかご教示いただけると幸いです。
回答2件
あなたの回答
tips
プレビュー