ブログ

フォームの入力値に応じて、次のフォームを出し分ける|Tips|日本トップクラスのHubSpotテック企業 株式会社パンセ

作成者: Admin|Jan 12, 2022 3:00:00 PM

例えば最初のフォームにラジオボタンがあったとして、

  • Aを選択した場合→続けてAフォームを出したい
  • Bを選択した場合→続けてBフォームを出したい

という場合に使えるものです。アイデア次第でステップフォームの入力とかに使えるやつですね。カスタムモジュールのフィールドとしては

  • フォーム選択(フォームセレクタフィールド)
  • 出し分けに利用するプロパティ名(テキストフィールド)
  • 出し分けフォーム(グループ&リピート)
    • プロパティ値(テキストフィールド)
    • フォーム選択(フォームセレクタフィールド)

という感じです。

カスタムモジュールのフィールド構成

コードはおおよそ次の通りです。最初のデータ整形の部分が少しゴチャゴチャしてしまっていますが……redirectUrlを<script>内で後からHubLで取れないので仕方ないですね。

  
  1.  
  2.  
  3. <script
  4. charset="utf-8"
  5. type="text/javascript"
  6. src="//js.hsforms.net/forms/v2.js"
  7. ></script>
  8. <script>
  9. const firstFormId = ""
  10. const conditonalForms =
  11. let valForCondition
  12. let currentFormId = firstFormId
  13.  
  14. window.addEventListener('message', event => {
  15. if(
  16. event.data.type !== 'hsFormCallback'
  17. || firstFormId !== currentFormId
  18. ) {
  19. return false;
  20. }
  21. if(event.data.eventName === 'onFormSubmit') {
  22. const prop = event.data.data.find(obj => obj.name === '')
  23. valForCondition = prop.value
  24. }
  25. if(event.data.eventName === 'onFormSubmitted') {
  26. const form = conditonalForms.find(obj => obj.property_value === valForCondition)
  27. currentFormId = form.form_id
  28.  
  29. const formOption = {
  30. region: "na1",
  31. portalId: "5692228",
  32. formId: form.form_id,
  33. }
  34.  
  35. if(form.response_type === 'redirect') {
  36. formOption.redirectUrl = form.redirect_url
  37. } else if (form.response_type === 'inline') {
  38. formOption.inlineMessage = form.message
  39. }
  40.  
  41. hbspt.forms.create(formOption);
  42. }
  43. });
  44. </script>

この例では1つ目のフォーム送信後はインラインメッセージを表示させ、そのまま2つ目のフォームを表示させることを想定していますが、1つ目送信後に遷移させたページの方で出し分けを行うことも可能です。

フォームを分けるのが嫌で、全体として1つのステップフォームとしたい場合はスクラッチでフォームをマークアップして、Submit data to a formのAPI経由でフォーム送信することになるでしょう。