いつもお世話になっております。
フォームブリッジにて、ドロップダウンがある特定の値(例「種類」の値「退職届」)の場合、社員番号フィールド(文字列)を、必須にするためのカスタマイズを行っております。
当方Javascript初心者ですが、掲示板の情報などいろいろ調べたり、引用したりして以下のコードを作成しました。しかし、あと一歩のところでつまずきました。何故か「種類」の値「退職届」が選択されている場合、社員番号フィールドに文字が入っているとエラーになります。(やりたいことの逆)
lengthを使ったり、trueとfalseを入れ替えてみたりと、色々試したのですが、全く改善せず、困り果てて投稿しました。お手数ですが、わかる方おられれば教えていただけると助かります。宜しくお願い致します。
※ちなみにkintone本体では、問題なく実装できております。
(function() {
'use strict';
fb.addValidators = function(state) {
return {
empty_validation: {
getMessage: function(fieldCode, params) {
return '退職届の社員番号は必須です';
},
validate: function(value, params) {
value = (value == null) ? "" : value;
if (state.record.種類.value.indexOf("退職届") == -1 && state.record.社員番号.value !== null) {
return true;
} else {
return false;
}
}
}
}
};
fb.events.form.created.push(function(state) {
state.fields.filter(function(field) {
return field.code === '社員番号';
})[0].validations.push({
params: [],
rule: 'empty_validation'
});
return state;
});
})();
t.cooさん
こんにちは。
if(state.record.種類.value.indexOf("退職届") ==-1&& state.record.社員番号.value !==null) {
記載の条件判定ですと
『種類に「退職届」を含まない かつ 社員番号の入力あり』の場合はOKで、それ以外はエラーとなります。
そのため、種類に「退職届」を含む場合は必ずエラーになってしまいます。
以下に合致する条件に変更してみてください。
『種類に「退職届」を含まない』 または 『種類に「退職届」を含む かつ 社員番号の入力あり』
また、以下コードは削除しても問題ないかと思います。
value = (value == null) ? "" : value;
koichi さん
ありがとうございます。
『種類に「退職届」を含まない』 または 『種類に「退職届」を含む かつ 社員番号の入力あり』ですので、以下の記述にしてみましたが、全く反応しなくなりました。試しに「state.record.種類.value.indexOf(“退職届”) !== -1」を「== -1」としたところ、反応しましたが、どの部分が間違っていますでしょうか?
if (state.record.種類.value.indexOf("退職届") == -1 || state.record.種類.value.indexOf("退職届") !== -1 && state.record.社員番号.value !== null) {
後半の&&括りを( ) で括ると変化ありますか?
if (state.record.種類.value.indexOf("退職届") == -1 || (state.record.種類.value.indexOf("退職届") !== -1 && state.record.社員番号.value !== null)) {
koichi さん
ありがとうございます。( ) は前半、後半区切ったりといろいろ試したのですが、ダメでした。「!== -1」を「== -1」に変更すると意図しない動きではありますがエラーが出ますので、この部分の記述自体は合っている気がします。
気になる内容として、「値が入っていないとそもそも validattion が動かないみたいです。空エラーはできないっぽいですね。」という投稿がありました。根本的に何か他の方法を変えないとダメなんですかね…。
https://developer.cybozu.io/hc/ja/community/posts/360056488232–%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%96%E3%83%AA%E3%83%83%E3%82%B8-custom-vallidation-%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
if (state.record.種類.value.indexOf("退職届") == -1 || (state.record.種類.value.indexOf("退職届") !== -1 && state.record.社員番号.value !== null))
改めて拝見すると、以下は「nullでない場合」のため空文字ですとtrueになります。
state.record.社員番号.value !== null
空文字をエラーにするために以下に変更します。
if (state.record.種類.value.indexOf("退職届") == -1 || (state.record.種類.value.indexOf("退職届") !== -1 && state.record.社員番号.value)) {
しかし、ご記載の通り、空のまま進むとエラーチェックが走らないので、意図する動きにはならないと思います。
根本的に変えてみます。
種類の選択変更があった際に「退職届」でなければバリデーションなし
「退職届」であれば「required」のバリデーションを当てます。
※種類ドロップダウンを選択しても変化ないと思いますが、確認or回答ボタンを押した際にエラーが表示されます。
fb.events.fields.種類.changed = [function(state) {
if (state.record.種類.value.indexOf('退職届') == -1) {
state.fields.filter(function(field) {
return field.code === '社員番号';
})[0].validations = [];
} else {
state.fields.filter(function(field) {
return field.code === '社員番号';
})[0].validations.push({
rule: 'required'
});
}
return state;
}];
koichi さん
なんか色々変更しているうちに、アルゴリズムが乱れていたようで…。
コードまでいただきありがとうございます。
上記コードで問題なく動作いたしました。本当にありがとうございました。心より感謝いたします。m(_ _)m
system
(system)
クローズされました:
8
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。