質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

630閲覧

disable属性によるフォームボタンのオンオフ制御ができない

ikuya666

総合スコア1

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2023/01/14 11:21

前提

laravel8にて勤怠管理アプリ作成中です。
フォームのボタンにjavaScriptを用いてbladeファイル読み込み時
に条件分岐にてdisable属性を使用してオンオフ制御をしたいのですが、うまく機能しません。

実現したいこと

勤怠ページに勤務開始、休憩開始、休憩終了、勤務終了4つのボタン
があります。
勤怠ページ読み込み→jsにて勤務開始のみクリック可能に

勤務開始クリック→コントローラにてDBに現在時刻を打刻→適当な変数に値を入れる→
変数を持って最初のページにリダイレクト

勤怠ページ読み込み、変数に値が入っていれば勤務終了と休憩開始のみクリック可能に

といった具合にdisable制御を機能させようとしています。

発生している問題・エラーメッセージ

勤務開始のみ実装して動作確認をしてる段階ですが、うまく機能せず
原因が特定できていない状況です。
jsのコードは継承のbladeに直書きです。
そもそもjavascriptが正しく機能していないのでしょうか。

該当のソースコード

javascript

1document.addEventListener('DOMContentLoaded',function() { 2 3 var start = @json($start); 4 var end = @json($end); 5 var rest_start = @json($rest_start); 6 var rest_end = @json($rest_end); 7 8 const startButton = document.getElementById('startButton'); 9 const endButton = document.getElementById('endButton'); 10 const restInButton = document.getElementById('restInButton'); 11 const restOutButton = document.getElementById('restOutButton'); 12 13 endButton.disabled = true; 14 restInButton.disabled = true; 15 restOutButton.disabled = true; 16 17 if(!empty($start)){ 18 startButton.disabled = true; 19 endButton.disabled = false; 20 restInButton.disabled = false; 21 } 22 },false); 23 24```blade.php(フォームボタン部分) 25<div class="button-box"> 26 <div class="top-button"> 27 <form action="/work_start" method="POST" class="button-form" name="start"> 28 @csrf 29 <button type="submit" id="startButton" >勤務開始</button> 30 </form> 31 <form action="/work_end" method="POST" name="end"> 32 @csrf 33 <button type="submit" id="endButton" >勤務終了</button> 34 </form> 35 </div> 36 <div class="bottom-button"> 37 <form action="/rest_start" method="POST" name="rest-start"> 38 @csrf 39 <button type="submit" id="restInButton" >休憩開始</button> 40 </form> 41 <form action="/rest_end" method="POST" name="rest-end"> 42 @csrf 43 <button type="submit" id="restOutButton" >休憩終了</button> 44 </form> 45 </div> 46 </div> 47 48### 試したこと 49 50 51### 補足情報(FW/ツールのバージョンなど) 52 53ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

JSの中でPHPを書いても動かない。if(!empty($start)){

JSとPHPの区別を付ける基本を理解できてないならJSを使うのはやめた方がいい。
JSでdisabledにしたところでhtmlのフォームはそんなことを無視して送信できるので送信させない対策としては不十分。

DBを使ってるならコントローラーからviewに渡すのはそのDBのデータ。
DBのデータを見て表示を切り替える。
DBがどうなってるかもボタンを表示する細かい条件も質問者しか知らないので質問者が考えること。

php

1@if(blank($work->work_start)) 2 <form action="/work_start" method="POST" class="button-form" name="start"> 3 @csrf 4 <button type="submit" id="startButton" >勤務開始</button> 5 </form> 6@else 7勤務中 8@endif 9 10@if(filled($work->work_start)) 11 <form action="/work_end" method="POST" name="end"> 12 @csrf 13 <button type="submit" id="endButton" >勤務終了</button> 14 </form> 15@endif

DBのデータでは切り替えられないならDBの設計を間違えてる。

さらにすでに勤務開始してるのに強引に/work_startに送信された場合はコントローラーでエラーを出す。JSでのdisabledは対策にならないのでコントローラーに来た段階でも検証。

php

1abort_if(filled($work->work_start), 500);

投稿2023/01/14 13:32

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問