formタグを自在に操りたい

formタグを自在に操りたい

こんにちは。システム開発部のよしもとです。

エンジニアとして働き始めてそろそろ半年がたちますが、今開発に携わらせていただいている部分で学んだことを復習も兼ねて残そうと思います。

エンジョイワークスでは不動産仲介、建築設計、ファンド事業の他、自社で宿泊施設や企業研修所など、たくさんの施設の運営もしています。
↓施設運営グループ(グッドネイバーズ )のサイト
https://good-neighbors.link/


そういった施設は当然予約をたくさん取って行かないといけないのですが、経路としては自社HPや予約サイトなど、複数の入り口から予約が入ってきます。
僕は現在、そのいろいろな経路から入ってきた予約データを一元管理するシステムの機能拡張を行っています。

フロント側ではWordpressを使っており、HTML/CSS、PHP、Java Script、サーバーサイド側はLaravel(PHPフレームワーク)で書いており、デザイン面以外はすべて僕が進めています。

その中で施設の予約フォームを作る機会があり、formタグを使ったPOST送信周りで困ったことがありました。


①1ページの入力データを2つの違うページに向けて送れるよう、それぞれボタンを設置したい

予約フォームには入力してもらった内容を確認する画面を設けており、間違いがあれば「戻る」、内容に問題がなければ予約を「確定」してもらうボタンを用意しています。
(よくあるやつですね。)



「戻る」ボタンにはinputタグのtype=”submit”を使っています。
意図としては予約入力画面に戻っても、前のページで入力してもらった内容を確実に保持させるため。

ここで困ったことになりました。
入力内容をデータベースに登録するために「確定」ボタンでもPOST送信する必要があるけど1つのページから2つの違うページに向けてPOST送信したい。

これに対してはHTML5から便利な属性が追加されているみたいです。
inputタグ内にformactionで送信先を指定することで送信先を上書きすることができます。

<form method="POST" name="form1" action="https://hoge.com">
・・・
 <input type="submit" value="戻る" formaction="https://hoge.com/previous_page">
</form>


これで「戻る」ボタンを押した際にformタグ内で指定している”https://hoge.com”ではなく、formactionで指定している”https://hoge.com/previous_page”に遷移します。

ちなみにformタグが入れ子にさえならなければ、1ページで複数のformタグを設置するのは問題ないようです。

- OK -
<form method="POST" name="form1" action="https://hoge1.com">
・・・
 <input type="submit" value="button1">
</form>
<form method="POST" name="form2" action="https://hoge2.com">
・・・
 <input type="submit" value="button2">
</form>

- NG -
<form method="POST" name="form1" action="https://hoge1.com">
 <form method="POST" name="form2" action="https://hoge2.com">
・・・
  <input type="submit" value="button2">
 </form>
 <input type="submit" value="button1">
</form>



②「確定」ボタンでAPI通信後(JavaScript動作後)にページを遷移させたい

入力してもらった内容をデータベースに登録するためにサーバーサイド側にリクエストを送る必要があるのですが、その通信をJavaScriptで実装しています。
「確定」ボタンのワンクリックで登録とページ遷移を行い、さらに次のページで登録内容の一部を表示させたい…

そんなときのためにJavaScriptにはform送信を行ってくれるメソッドsubmit()が用意されています。
(最終的には以下のような形のコードになりました。)


<form method="POST" name="form1" action="https://hoge.com">
・・・
 <input type="submit" value="戻る" formaction="https://hoge.com/previous_page">
 <input type="button" id="complete" name="complete" value="確定">
</form>

<script>
 const complete = document.getElementById('complete')
 complete.addEventListener('click', function() {
 ・・・
 }
 ・・・(API通信処理)
 document.form1.submit()




これでAPIとの通信処理の後にname属性”form1″を指定しているformタグがsubmitされます。
ちなみにinputタグのtypeは”button”としていますが、”submit”でも可能です。
ただその場合はデフォルトの動作をストップするために


complete.addEventListener('click', function(e) {
e.preventDefault()
・・・
}


としてあげる必要があります。
これで元々のsubmitが実行されずにJavaScriptのsubmitでのみform送信が実行されます。

最後に…

今回、作成した予約フォームは葉山にある平野邸 hayamaという宿泊とスペース貸しの機能を備えた施設のスペース貸しの方のもので、近日リリース予定です。

↓平野邸 hayama HP
https://hiranoteihayama.com/

次回気が向いたらサーバーサイド側の紹介とかできたらなと思っています。

一覧へ戻る

株式会社 エンジョイワークス

令和4年度 国土交通省PPP協定パートナー
宅地建物取引業 [神奈川県知事(3)第28062号]
一級建築士事務所 [神奈川県知事登録 第16506号]
不動産特定共同事業者 [金融庁長官・国土交通大臣 第114号]
(第1号、2号、3号、4号に掲げる事業を行う)
第二種金融商品取引業 [関東財務局長(金商)第3148号]
住宅宿泊管理業者 [国土交通大臣(01)第F00604号]
(関連会社グッドネイバーズにて取得)

ファンド出資時の注意事項

  • 出資に際しご負担頂くのは出資金額のみで、それ以上の支払は発生しません。出資金から年度毎に管理報酬を、その他銀行手数料等をご負担頂きます。
  • 事業の状況により、利益の分配が行われない可能性及び返還される出資金が元本を割る可能性があります。詳しくはハロー!RENOVATIONの「ファンド情報」から内容をご確認ください。
  • 不動産特定共同事業のファンドにおいて、株式会社エンジョイワークスは、当事者として不動産特定共同事業法第2条第3項第2号の匿名組合型契約を出資者と締結します。