Marketing HubCMS Hub

フォームの入力値に応じて、次のフォームを出し分ける

目次

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

    • 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経由でフォーム送信することになるでしょう。

    執筆者:Admin

    関連記事