HTML: アセったときに読む【入力・送信フォーム】

HTML Web

さて今回は、Webアプリを作っていると出くわす、忘れがちな内容について書いていきます。
『いや、アプリ作ってたら忘れないでしょ』と思うかもしれませんが、チームでコーディングしていると、自分がやったことがない場面に出くわすことがあります。
または、使用頻度が少なかったり、その環境に依存した書き方だったりを多用していたりして、かなり根本から忘れがちです。

忘れているだけで、見たら思い出すのですが、いちいち探し出すのは面倒です。
という訳で、今回は事始めとして『入力・送信フォーム』について書いていきます。

スポンサードサーチ

入力・送信フォーム

入力された検索条件に応じたデータの取得や、編集ページでの保存確定時に必須の機能になります。
つまりは、『ある名前とその値をサーバー側に投げたい』という事ですね。
やっていることとしては、あるURLに『userIdという名前で、その値は1000のものを、サーバーに投げる』これだけです。
サーバー側で受け取る口があれば、userId = 1000として受け取ってくれます。このようにしてデータの送信を行います。

基本の覚え方は、

  • まずは、formタグで囲う
  • 入力フォームは、inputタグのnameとvalueを使う
  • 最後は、buttonタグをsubmitにし、送信する

細かいことは気にせずに、とりあえず上記の3つを意識していただければ、さまざまな値をサーバーに送信するための枠組みは作れるようになります。

まずはformタグ

それぞれの詳細を説明しましょう。まずはformタグで囲いましょう。そしてのちに入るinputタグや、buttonタグもすべてここにぶち込みます。
想定としては、最後にsubmitのtypeを持つbuttonが押されることで、formタグ内のinputに書かれたnameとvalueのペアを、指定されたURLに送信します。
この感覚を覚えるようにしましょう。
実際にコードで見ていくと、

<form method="GET" action="User/Index">
</form>

となります。

methodはHTMLのHTTPメソッドを指定するためです。
基本的に、データを取るだけならばメソッドはGET, データが変更される場合はPOSTで投げましょう。
actionは、送信したいURLになります。サイト名の部分は省略してもOKです。勝手に『今いるサイト』であるという事は認識してくれます(いわゆる、相対URLというやつです。古パスにしたら絶対URLと言います)。

そして、.net coreを使っている方なら、タグヘルパーを使って、formの部分は以下のようにもできます(UserControllerで、Indexのアクションに送りたいとする)。

<form method="get" asp-controller="User" asp-action="Index">
</form>

少し表記が違いますが、惑わされないようにしましょう。

inputタグ(nameとvalue)について

そして次に、formタグの中でinputタグを定義します。
こちらが実際の入力フォームになりますので、サイトによってはめちゃめちゃ凝る部分になります。
しかし、こちらも覚えることは簡単で、基本はinputタグの中のname とvalueで決まります。nameはいわゆる変数名。そして、valueがユーザが入力した値が入ります。
また、最初からデフォルトで値を入れておきたいという場合にもvalueに値を設定します。

<form method="get" action="/User/Index">
    <input asp-for="@UserId" placeholder="ユーザーID"/>
</form>

しかしながら、inputタグの入力フォームは、いくつか型があります。サーバーに送る値に応じてtypeを設定するようにしましょう。
例えば、文字列であればtype=”text”ですし、int型であれれば、type=”number”と指定しましょう。

<form method="get" action="/User/Index">
    <input asp-for="@UserId" placeholder="ユーザーID"/>
</form>

他にもいろいろなタイプがあるので必要に応じて設定しましょう。しておいた方が後でハマる可能性は少なくなります。
 >>inputタグのいろんなtypeについて

また、このinputタグだけですと、何の項目の入力なのか分かりません。
そこで、inputタグの前にlabelタグを指定することで、分かりやすくします。ここはlabelタグじゃなくてもいいかもしれませんが、ここではlabelタグを使用します。

<form method="get" action="/User/Index">
    <label>ユーザーID:</label>
    <input name="UserId" value="" type="number"/>
</form>

このようにして、入力フォームが何を入力すべきなのかユーザーに明示します。
また、labelが邪魔な時もあるでしょう。入力フォームに薄い字で『入力すべき項目』が書かれていれば良い。そういう時は、プレースフォルダという機能を使います。

<input name="UserId" value="" type="number" placeholder="ユーザーID"/>

以上がinputタグです。基本はnameとvalueを使って送信項目を作る、と覚えてください。

ちなみに.net coreで書くならば、

<form method="get" asp-controller="User" asp-action="Index">
    <label asp-for="@UserId"></label>
    <input asp-for="@UserId" placeholder="ユーザーID"/>
</form>

というように『asp-for=”…”』とタグヘルパーを書くだけで簡単に書くことができます。

締めのbuttonタグにsubmit

最後になります。以下のように、buttonタグにsubmitを定義しましょう。
このボタンが押されることで、formタグ内のinputタグに入力されたデータが、指定されたURLに飛びます。
変数はUserId(name)で、値(value)は入力された値です。

<form method="get" action="User/Index">
    <label>ユーザーID</label>
    <input name="UserId" value="" type="number"/>
  <button type="submit">検索</button>
</form>

submitの書き方は、buttonでもいいですし、inputでも良いみたいです。
参考に、『submitのinputとbuttonについて考えてみた』系の記事がありますので載せておきます。
 >>【HTML】input type = “submit” と “button” の違いって・・・?

こちらの記事でも、よく分からないで終わっているそうですが、色々調べてみると、buttonタグにsubmitと書いたケースの方に軍配が上がっているような気がします。

まとめ

  • まずは、formタグで囲う
  • 入力フォームは、inputタグのnameとvalueを使う
  • 最後は、buttonタグをsubmitにし、送信する

を意識してフォームの入力と送信を行いましょう。
これでしばらく忘れません。