質問するログイン新規登録
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回答

475閲覧

プルダウンの選択フォームの選択がない場合にエラーメッセージを表示したい

em999

総合スコア2

Laravel

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

PHP

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

JavaScript

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

0グッド

0クリップ

投稿2023/12/26 13:59

編集2023/12/26 14:11

0

0

実現したいこと

プルダウンの選択フォームの選択がない場合にエラーメッセージを表示したい

前提

Laravelで商品登録ページを作成していて、
メーカーを選択するプルダウンの選択をせずに登録しようとするとエラーメッセージを表示させるコードをjavaScriptを使って書いたのですが、
エラーが出てしまいます。
どなたか詳しい方アドバイスお願いいたします。

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

main.js:1 Uncaught TypeError: Cannot read properties of null (reading 'addEventListener') at main.js:1:35

イメージ説明

該当のソースコード

<div class="form_frame"> <form method="post" id="newForm" action="{{route('post.store')}}" enctype="multipart/form-data"> @csrf <ul> <li> <div> <label for="product">商品名<span>*</span></label> <input type="text" id="product" name="product" value="{{old('product')}}"> @error('product') <div class="error">{{$message}}</div> @enderror </div> </li> <li> <div> <label for="brand">メーカー名<span>*</span></label> <select id="brandSelect" name="brand_id"> <option velue="" selected disabled >メーカー名</option> @foreach ($categories as $category) <option value="{{$category->id}}">{{$category->brand}}</option> @endforeach </select> <div id="selectErrorMessage"></div> </div> </li> <li> <div> <label for="price">価格<span>*</span></label> <input type="number" id="price" name="price" value="{{old('price')}}"> @error('price') <div class="error">{{$message}}</div> @enderror </div> </li> <li> <div> <label for="stock">在庫<span>*</span></label> <input type="number" id="stock" name="stock" value="{{old('stock')}}"> @error('stock') <div class="error">{{$message}}</div> @enderror </div> </li> <li> <div> <label for="pic">商品画像</label> <input type="file" id="pic" name="image_path" value="{{old('image_path')}}"> </div> </li> <li> <div> <label for="comment">コメント</label> <textarea id="comment" name="comment" value="{{old('comment')}}"></textarea> </div> </li> </ul> <div class="btn-section"> <button class="entry-btn" type="submit">新規登録</button> <button type="button" onclick="history.back()" class="return-btn">戻る</button> </div> </form>
document.getElementById("newForm").addEventListener("submit", function(event){ let selectedValue=document.getElementById("brandSelect").value; if(!selectedValue){ document.getElementById("selectErrorMessage").textContent="メーカー名は必須です"; event.preventDefault(); }else{ document.getElementById("selectErrorMessage").textContent=""; } });

試したこと

スペルミスがないか確認して、
いろいろ調べたのですが、全く進まず、、

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

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

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

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

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

arcxor

2023/12/26 17:11

その JavaScript はどのタイミングで実行されるのですか?DOM構築後ですか?
em999

2023/12/27 14:57

コメントありがとうございます。DOM構築後とはどうゆうことでしょうか?調べましたがよく理解できませんでした。ツリー構造になっているのはわかるのですが、DOM構築がわかりませんでした。 参考サイト等があれば教えていただけますでしょうか? よろしくお願いいたします。
guest

回答1

0

提示コード部分だけみると問題ないように見受けられます。
id="newForm" が別の場所にも存在していないでしょうか?
あるいは、htmlタグより前にスクリプトを読み込んでないでしょうか。

下記のようなコードで、formオブジェクトが正しく取得できているかをまず確認すると良いかと思います。

javascript

1const form = document.getElementById("newForm"); 2console.log(form);

投稿2023/12/26 15:00

編集2023/12/27 05:18
Eggpan

総合スコア3297

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

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

em999

2023/12/27 15:00

回答ありがとうございます!! オブジェクトの取得できていませんでした。 idも重複はありません。 スクリプトを読み込む位置はボディの中なので大丈夫かと思うのですが。。。
Eggpan

2023/12/27 15:08

bodyタグの中かどうかではなく、htmlのdivタグである<div class="form_frame">の閉じタグより後にスクリプトがよみこまれないと取得は出来ないです。 一般的には </body> の直前にscriptタグを書くか、scriptタグにdefer属性をつけるなどの対応をします。
em999

2023/12/27 15:25

そうなんですね!! 知識が浅くてお恥ずかしいです・・・ </body>の前にscriptタグを置くことでオブジェクトの取得ができました!! 少しだけど前に進めました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問