フォームブリッジを利用し、試験等の申込を募るフォームを開発中です。
その中で実装しようとしているカスタマイズについて、お知恵をお借りしたいと思います。
【概要】
①申込者は、フォームのkViewerルックアップから申し込みたい案件を選択。
②選択した案件の申込期限がフィールドに自動設定される。
③changeイベントにて、申込期限フィールドが変更されたことを契機に、
「申込期限」と「現在日付」を比較し、申込期限を超過していた場合は、
①のルックアップで取得した値をクリアする。
※クリア対象のフィールドは以下のとおり。
・試験名(文字列)
・申込期限(日付)
・受験年度(数値)
・会場確認(文字列)
・試験実施日(日付)
【課題・実現したいこと】
③の申込期限を超過していた場合に、「試験実施日」のクリアが上手くいかず、ルックアップで取得した値が残ったままになってしまいます。
※同じ日付フィールドの「申込期限」はクリアされます。
【プログラム】
// 申込期限の値が変更された場合、現在日付と比較。期限超過⇒アラート表示、値クリア
fb.events.fields.申込期限.changed = [function(state) {
var nowdate = state.record.現在日付.value;
var deadline = state.record.申込期限.value;
if (deadline < nowdate) {
alert('申込期限を超過しています。必要に応じて担当部署に連絡願います。');
state.record.申込可否区分.value = '申込不可';
state.record.試験名.value = "";
state.record.申込期限.value = null;
state.record.受験年度.value = "";
state.record.会場確認.value = "";
state.record.試験実施日.value = null;
}
else{
state.record.申込可否区分.value = '申込可';
}
何かお心当たりがあれば、ご教示いただけると助かります。
よろしくお願いいたします。
center haraさん
度々こんにちは。
コードは問題ないと思うのですが、ブラウザのデベロッパーツールのコンソールタブを開いて、エラーが出ていないですか?
例えば、コードに記載のフィールドコードと実際のフィールドコードが異なっているなど。
もしくは、クリアする値に対するchangeイベントが別で定義されてたりしますか?
koichiさん
度々ありがとうございます。
またお世話になりますm__m
ご指摘いただいた内容、以下のとおり確認いたしました。
・プログラムのフィールドコードと実際のフィールドコードに差異がないか。
⇒確認しましたが、差異はなさそうでした。
・クリアする値に対するchangeイベントが別で定義されていないか。
⇒別のjsファイルも登録しており、そこでもchangeイベントを使用していますが、該当フィールドに関する記述はしておりません。
ただし、デベロッパツールでデバッグしていると以下のようなエラーが確認できました。
若輩者で、このエラーが本件と関連しているか不明ですが、ご確認いただけると助かります。
ご確認ありがとうございます。
「試験実施日」のみがクリアできず、他5フィールドは指定の値でクリアされていますか?
変化ないかもしれませんが、試しに「state.record.試験実施日.value = null;」を申込可否区分の上に移動させてみてください。
それ以外に可能でしたら、このJS以外を一旦全て外してどのような挙動になるか確認いただけますと幸いです。
そちらのエラーはフォームブリッジ標準で入っているgoogle recaptchaのエラーと思いますので、本件には関係ないかなと思います。
koichiさん
お世話になります。
アドバイスいただいた点を確認していく中で、試しに”試験実施日”というフィールドコードを”date"に変更し、コードもそれに合わせて変更したところ上手く動作しました。
やはりフィールドコードの指定部分に問題があったのかもしれません。
とりあえず、この形で進めてみようと思います。
質問に対して丁寧にご回答いただき、ありがとうございました。
またよろしくお願いいたします。
スペースや不要な文字列が入っていたのでしょうか。。
ひとまず動作するようになったとのことで何よりです!
koichiさん
すみません…
どうやら私の認識に誤りがあったようで、まだ解決に至っておりません。
色々試すうちに、何となく事象の原因となる部分が分かってきましたので記載いたします。
まず、kViewerルックアップにてフィールドに自動設定される値を以下のようにしておりました。
こちらの画像のとおり、値が上手くクリアできなかった「試験実施日」は各項目の最後に設定をしております。
試しに「受験年度(西暦)」と「試験実施日」の設定順を入れ替えたところ、今度は「受験年度」の値がクリアされませんでした。
おそらくこちらの設定順が関係していそうですが、プログラムの書き方などで回避できる方法があるでしょうか?
このchangedイベントの最後に「return state;」は入っていますか?
「申込期限」「試験実施日」は日付
それ以外は文字列1行フィールドでしょうか?
このルックアップ以外にルックアップフィールドはありますか?
お世話になります。
返信が遅くなり申し訳ありません。
>このchangedイベントの最後に「return state;」は入っていますか?
⇒「return state;」は入れております。
>「申込期限」「試験実施日」は日付。それ以外は文字列1行フィールドでしょうか?
⇒それぞれ、「受験年度」(数値)、「試験名」(文字列1行)、「会場確認」(文字列複数行)になります。
>このルックアップ以外にルックアップフィールドはありますか?
⇒これ以外に、もう1つルックアップフィールドがあります。
返信遅くなり申し訳ございません。
ご確認いただきありがとうございます。
恐らくですが原因が分かりました。
kViewerルックアップが取得しきるのにラグがあるようです。
フィールド数によるのだと思いますが、初期化処理が走った後にルックアップ取得されているものと思います。
解決策として、「申込期限」ではなく一番下にあるフィールドのchangedイベントで実行すると良いです。
今回ですと「試験実施日」でしょうか。
ご返信ありがとうございます。
ご指摘いただいた原因、大変納得しました。
また、ご提示いただいた解決策を施したところ、今度こそ上手く動作しました。
本当にありがとうございました!