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

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。

JavaScriptを基礎からしっかりと学びたい方へ

下記の参考書がおすすめです。私がJavaScript入門時に購入した書籍で、基礎から応用まで多様なサンプルを用いて解説されています。ページ数は多いですが、内容が伴っているのですらすら読めます。腰を据えて学びたい方に最良の一冊となっています。