【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パラメータを送信しないようにする方法のご紹介でした!