@tfky 様
株式会社ルシダスの熊谷です。
お悩みの件、
「フラッシュフィールド」のハックを利用することで解決できるのでは?と考えました。
以下、ご確認くださいませ。
【フォームの作成について】
- 郵便番号を必須項目にする。
- Javascriptで取得しきれない住所の続き(番地やマンション名)を入力するために「フラッシュフィールド」のカスタムフィールドを必須項目で追加する
【スマートキャンペーンのフローについて】
- 該当のフォーム入力をトリガーに、「フラッシュフィールド」で回収した値を、リードトークンを利用して「住所(Address)フィールド」へ書き写す
- 役目を終えたフラッシュフィールドの値はNULLで空欄に戻す。
【補足】
上記だけでも目的は果たせるかと思いますが、Javascriptで取得してきた「都道府県(State)」「市町村(City)」「住所(Address)」の値をフォーム入力の際にお客様が自由に書き換えられるのはかえって不都合があるかと思います。
そこで、
該当の3つのフィールドに対して、「readonly="true"」を付与して、「表示はされるが書き換えはできない」としてあげることで、より利便性やデータの保守向上に繋がるのではないでしょうか?
以下、Javascript改造例
MktoForms2.whenReady(function (form) {
if(!!document.getElementById("PostalCode")){
//入力を受け付けないように変更し、灰色の背景色で入力不可を視覚的に伝える
document.getElementById("State").setAttribute("readOnly", true);
document.getElementById("State").style.background = ("#ddd");
document.getElementById("City").setAttribute("readOnly", true);
document.getElementById("City").style.background = ("#ddd");
document.getElementById("Address").setAttribute("readOnly", true);
document.getElementById("Address").style.background = ("#ddd");
document.getElementById("PostalCode").onkeyup = function(){
AjaxZip3.zip2addr('PostalCode','','State','City','Address');
}
}else{
console.log("noPostalCode")
};
});
フォーム側の下準備

スマートキャンペーンのフロー設定方法と実行結果

以上です。
ぜひお試しください。
「フラッシュフィールド」のハックについて詳細はこちら
https://nation.marketo.com/t5/japan-user-group-discussions/001-marketo%E3%82%92%E6%8B%A1%E5%BC%B5%E3%81%99%E3%82%8B%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89-marketohack/gpm-p/244325#M2723