【JavaScript】formのGETメソッドで空のinputパラメータを送信しないようにする
※本ページのリンクにはプロモーションが含まれています。
こんにちは、Ryohei(@ityryohei)です!
本記事では、JavaScriptで、formのGETメソッドを指定している場合に空のinputパラメータを送信しないようにする方法をご紹介しています。
JavaScriptでformの空のinputパラメータを送信しないようしたいな。良い方法ないかな?
上記の疑問にお答えします。
では、解説していきます。GETメソッドの空のinputパラメータとは
下記はform
要素のGETメソッドで空のinput
パラメータを送信した際のURLです。
http://localhost/?name=&email=&tel=&content=&other=
上記URLの?
以降にinput
パラメータが続いていますが、=
の右辺を見ると値が空の状態です。上記のような空のパラメータを、空のinput
パラメータとしています。GETメソッドでフォームの送信先に空のinputパラメータが渡ってしまうと、URLが長くなる、視認性が悪くなる、アクセス解析の妨げとなるといったデメリットがあります。このようなデメリットを解消するため、form
要素をGETメソッドでsubmit
した際に空のinput
パラメータが送信先に渡らないようにしてみます。
GETメソッドで空のinputパラメータを送信しないようにするには
form
のGETメソッドで空のinput
パラメータを送信しないようにする方法は色々あると思いますが、本記事ではform
要素のsubmit
イベントが発火した際にinput
要素の値が空の場合はdisabled
を有効にして、input
要素が送信されないように対策してみます。
HTML
<form method="get" action=""> <table> <tbody> <tr> <th>名前</th> <td> <input name="name" type="text" value=""> </td> </tr> <tr> <th>メールアドレス</th> <td> <input name="email" type="email" value=""> </td> </tr> <tr> <th>電話番号</th> <td> <input name="tel" type="tel" value=""> </td> </tr> <tr> <th>お問い合わせ内容</th> <td> <textarea name="content"></textarea> </td> </tr> <tr> <th>その他</th> <td> <textarea name="other"></textarea> </td> </tr> </tbody> </table> <button>送信</button> </form>
JavaScript
//ドキュメント上の最初のフォーム要素を取得 const form = document.forms[0]; //formのsubmitイベントで発火 form.addEventListener('submit', ()=>{ //formのinput要素を処理 Array.from(form).forEach((input)=>{ //値が空の場合 if(input.value === ''){ //disabledを有効にする input.disabled = true; } }); }, false);
処理内容はコメントに記載の通りです。これでinput
の値が空の要素がパラメータに含まれないようになります。同じような現象でお悩みの方はぜひ試してみてくださいね。
最後に
form
要素を使用する場合、バリデーションチェックをされる場合がほとんどだと思います。もしGETメソッドを使用していて、フォームの送信先に空のinput
パラメータを渡す必要がない場合は、バリデーションチェックとあわせて空のinput
要素に対してdisabled
を設定する処理を追加しても良いかもしれないですね。
以上、JavaScriptで、formのGETメソッドで空のinputパラメータを送信しないようにする方法のご紹介でした!
JavaScriptを基礎からしっかりと学びたい方へ
下記の参考書がおすすめです。私がJavaScript入門時に購入した書籍で、基礎から応用まで多様なサンプルを用いて解説されています。ページ数は多いですが、内容が伴っているのですらすら読めます。腰を据えて学びたい方に最良の一冊となっています。