フォームブリッジで入力した内容がkintoneに反映されない(郵便番号→住所)

こちらのスレッド(https://developer.cybozu.io/hc/ja/community/posts/4414614141337-%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%96%E3%83%AA%E3%83%83%E3%82%B8%E3%81%A7%E9%83%B5%E4%BE%BF%E7%95%AA%E5%8F%B7%E3%81%8B%E3%82%89%E4%BD%8F%E6%89%80%E3%82%92%E8%87%AA%E5%8B%95%E5%8F%8D%E6%98%A0%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84)を参考に郵便番号→住所の表示はうまくいきましたが、表示はされますがなぜかkintoneに保存されません。。。

手入力で入力した場合は保存されます。

アドバイスいただけませんでしょうか?

前田丸さん

こんにちは。

 

私が回答してましたので、確認させていただければと思います。

前田丸さんが使用されているコードを添付いただくことは可能ですか?

 

もう1点確認で、フォームの確認画面を表示する設定に切り替えてください。

(既にそうなっていればそのままで構いません)

確認画面上でも住所は表示されてますでしょうか?

koichiさん、返信ありがとうございます。

確認画面表示する設定に変更したところ、確認画面にも表示されませんでした。

ソースは以下の通りです(長くてスミマセン・・・)

お手数ですが、よろしくお願いいたします。

(()=> {

    ‘use strict’;

    // 郵便番号から住所を取得する関数

    function ZipToAddress(state) {

        // フィールド設定

        const settings = [

            {postcode: “自宅郵便番号”, prefecture: “自宅住所都道府県”, address1: “自宅住所_市町村”},

            {postcode: “会社郵便番号”, prefecture: “会社都道府県”, address1: “会社住所_市町村”},

            {postcode: “サロン郵便番号”, prefecture: “サロン住所都道府県”, address1: “サロン住所_市町村”},

        ];

        // 配列全てにイベント設定を行う

       settings.forEach(function(value, index) {

        const elePostcode = $(‘[data-vv-name="’ + value.postcode + ‘"]’).find(‘input’);

        const eleprefecture = $(‘[data-vv-name="’ + value.prefecture + ‘"]’).find(‘input’);

        const eleAddress1 = $(‘[data-vv-name="’ + value.address1 + ‘"]’).find(‘input’);

            // 郵便番号フィールドのフォーカスが外れた時のイベント

            elePostcode.on(‘input’, function() {

                const zipInput = elePostcode.val();

                // 書式チェック

                // 7桁数値のハイフンありなしOK

                if (!zipInput.match(/^[0-9]{3}-?[0-9]{4}$/)) {

                    return;

                }

                const code1 = zipInput.replace(/^([0-9]{3}).*/, “$1”);

                const code2 = zipInput.replace(/.*([0-9]{4})$/, “$1”);

                // 郵便番号APIから検索

                const endpoint = ‘https://madefor.github.io/postal-code-api/api/v1’;

                const url = endpoint + ‘/’ + code1 +‘/’ + code2 + ‘.json’;

                $.ajax({

                    url: url,

                    type: ‘GET’,

                    dataType: ‘json’

                })

                .done((data) => {

                    const prefecture = data.data[0].ja.prefecture;

                    const address1 = data.data[0].ja.address1 + data.data[0].ja.address2;

                    eleprefecture.val(prefecture);

                    eleAddress1.val(address1);

                })

                .fail((data) => {

                    console.log(data);

                    })

                .always((data) => {

                });

            });

         });

    }

    // 自宅郵便番号が変更された時

    fb.events.fields.自宅郵便番号.changed = [function(state) {

        ZipToAddress(state);

    }]

    // 会社郵便番号が変更された時

    fb.events.fields.会社郵便番号.changed = [function(state) {

        ZipToAddress(state);

    }]

    // サロン郵便番号が変更された時

    fb.events.fields.サロン郵便番号.changed = [function(state) {

        ZipToAddress(state);

    }]

})();

ソースありがとうございます。

state.record.フィールドコード.valueへの登録がないとkintoneへは登録されません。

見た目上はHTMLのinput要素に対してvalを設定しているので、入力されたように見えますが

フォームブリッジ内部的にはstateに値を格納する必要があります。

 

ソース抜粋します。書き方は一例です。

.done((data) => {
  const prefecture = data.data[0].ja.prefecture;
  const address1 = data.data[0].ja.address1 + data.data[0].ja.address2;

  eleprefecture.val(prefecture);
  eleAddress1.val(address1);

// state.record[フィールドコード].value への登録が必要
state.record[value.prefecture].value = prefecture;
state.record[value.address1].value = address1;

})

無事反映することができるようになりました。

ありがとうございました。感謝感謝です。

koichiさま

同じ方法で郵便番号→住所の変換をしたところ、ステップフォームで次へ行く際の

必須チェックにひっかかってしまいまいた。

前回成功したフォームは「住所」が必須でなく、ステップフォームでもないフォームでした。

ソースは先日教えていただいたところを修正したのみで、以下の通りです。

アドバイスいただけませんでしょうか。

 

(()=> {

    ‘use strict’;

    // 郵便番号から住所を取得する関数

    function ZipToAddress(state) {

        // フィールド設定

        const settings = [

            {postcode: “自宅郵便番号”, prefecture: “自宅住所都道府県”, address1: “自宅住所_市町村”},

            {postcode: “会社郵便番号”, prefecture: “会社都道府県”, address1: “会社住所_市町村”},

            {postcode: “サロン郵便番号”, prefecture: “サロン住所都道府県”, address1: “サロン住所_市町村”},

        ];

        // 配列全てにイベント設定を行う

       settings.forEach(function(value, index) {

        const elePostcode = $(‘[data-vv-name="’ + value.postcode + ‘"]’).find(‘input’);

        const eleprefecture = $(‘[data-vv-name="’ + value.prefecture + ‘"]’).find(‘input’);

        const eleAddress1 = $(‘[data-vv-name="’ + value.address1 + ‘"]’).find(‘input’);

            // 郵便番号フィールドのフォーカスが外れた時のイベント

            elePostcode.on(‘input’, function() {

                const zipInput = elePostcode.val();

                // 書式チェック

                // 7桁数値のハイフンありなしOK

                if (!zipInput.match(/^[0-9]{3}-?[0-9]{4}$/)) {

                    return;

                }

                const code1 = zipInput.replace(/^([0-9]{3}).*/, “$1”);

                const code2 = zipInput.replace(/.*([0-9]{4})$/, “$1”);

                // 郵便番号APIから検索

                const endpoint = ‘https://madefor.github.io/postal-code-api/api/v1’;

                const url = endpoint + ‘/’ + code1 +‘/’ + code2 + ‘.json’;

                $.ajax({

                    url: url,

                    type: ‘GET’,

                    dataType: ‘json’

                })

                .done((data) => {

                    const prefecture = data.data[0].ja.prefecture;

                    const address1 = data.data[0].ja.address1 + data.data[0].ja.address2;

                    eleprefecture.val(prefecture);

                    eleAddress1.val(address1);

                    state.record[value.prefecture].value = prefecture;

                    state.record[value.address1].value = address1;

                })

                .fail((data) => {

                    console.log(data);

                    })

                .always((data) => {

                });

            });

         });

    }

    // 自宅郵便番号が変更された時

    fb.events.fields.自宅郵便番号.changed = [function(state) {

        ZipToAddress(state);

    }]

    // 会社郵便番号が変更された時

    fb.events.fields.会社郵便番号.changed = [function(state) {

        ZipToAddress(state);

    }]

    // サロン郵便番号が変更された時

    fb.events.fields.サロン郵便番号.changed = [function(state) {

        ZipToAddress(state);

    }]

})();

 

 

「住所」はフィールドコード「自宅住所_市町村」「会社住所_市町村」「サロン住所_市町村」の3つでしょうか。

3つすべてに対して、必須のエラーが出ますか?

 

console.logを入れて、ブラウザのデベロッパーツールのコンソールタブで各フィールドのvalueに値が格納されているかご確認ください。

state.record[value.prefecture].value = prefecture;
state.record[value.address1].value = address1;

console.log('自宅住所_市町村:' + state.record.自宅住所_市町村.value);
console.log('会社住所_市町村:' + state.record.会社住所_市町村.value);
console.log('サロン住所_市町村:' + state.record.サロン住所_市町村.value);

返信ありがとうございますm(__)m

住所は4つですが、自動でセットしているのは「自宅住所都道府県」「自宅住所_市町村」

の2つで、2つともエラーになります。このあと手で入力しなおせば、必須エラーに引っかからずにステップ2へ進めます。

関係あるかわかりませんが、ステップ1にこのセットが2つ(自宅住所都道府県/自宅住所_市町村)(会社都道府県/会社住所_市町村)

ステップ2に1つ(サロン住所都道府県/サロン住所_市町村)あります。

console.logも確認しました。

console.log(‘自宅住所_市町村:’ + state.record.自宅住所_市町村.value);
console.log(‘会社住所_市町村:’ + state.record.会社住所_市町村.value);
console.log(‘サロン住所_市町村:’ + state.record.サロン住所_市町村.value);

で記述して、以下のようにログが出力されます(サロン住所はstep2なのでまだいれてません。)

記載いただいたコードですと、私の方だとエラー無く次に進むのですが、

上記コード以外に何か別のコードが記載されていたり、別ファイルを設定に入れたりされてますか?

そうですか・・・

今試してみたのですが、ステップがないタイプだとうまくいきます。

スクリプトは上に記載したもののみなのです。

koichiさま

解決したかもしれません。

>スクリプトは上に記載したもののみなのです。

と書いて、違和感があったのでちょっと考えてみると、最初のころに設定していた

https://form.kintoneapp.com/static/js/togglevalidate.js

が消えてしまってました。

こちらを設定したらうまく動作するようになりました。

大変お騒がせして申し訳ありませんm(__)m

いつもありがとうございます。。。

そちらが影響していたのですね。

解決されて何よりです!

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。