例えば最初のフォームにラジオボタンがあったとして、
という場合に使えるものです。アイデア次第でステップフォームの入力とかに使えるやつですね。カスタムモジュールのフィールドとしては
という感じです。
コードはおおよそ次の通りです。最初のデータ整形の部分が少しゴチャゴチャしてしまっていますが……redirectUrlを<script>内で後からHubLで取れないので仕方ないですね。
- <script
- charset="utf-8"
- type="text/javascript"
- src="//js.hsforms.net/forms/v2.js"
- ></script>
- <script>
- const firstFormId = ""
- const conditonalForms =
- let valForCondition
- let currentFormId = firstFormId
- window.addEventListener('message', event => {
- if(
- event.data.type !== 'hsFormCallback'
- || firstFormId !== currentFormId
- ) {
- return false;
- }
- if(event.data.eventName === 'onFormSubmit') {
- const prop = event.data.data.find(obj => obj.name === '')
- valForCondition = prop.value
- }
- if(event.data.eventName === 'onFormSubmitted') {
- const form = conditonalForms.find(obj => obj.property_value === valForCondition)
- currentFormId = form.form_id
- const formOption = {
- region: "na1",
- portalId: "5692228",
- formId: form.form_id,
- }
- if(form.response_type === 'redirect') {
- formOption.redirectUrl = form.redirect_url
- } else if (form.response_type === 'inline') {
- formOption.inlineMessage = form.message
- }
- hbspt.forms.create(formOption);
- }
- });
- </script>
この例では1つ目のフォーム送信後はインラインメッセージを表示させ、そのまま2つ目のフォームを表示させることを想定していますが、1つ目送信後に遷移させたページの方で出し分けを行うことも可能です。
フォームを分けるのが嫌で、全体として1つのステップフォームとしたい場合はスクラッチでフォームをマークアップして、Submit data to a formのAPI経由でフォーム送信することになるでしょう。