複数の数値フィールドが存在し,それらの和が100の場合のみ投稿を許可したいということでよろしいでしょうか.
実装方法を2つご提案させていただきます.1つめのほうが,プログラムの構造を理解するのは簡単かと思います.
※全てのブラウザで動作確認を行っておりません.ご利用前に,ご自身で確認をして頂ますよう,お願いします.
※GoogleChromeでのみ動作確認をしております.
□1つめ:
対象の数値フィールドの合計を計算する数値計算フィールドを用意(これは編集不可にしておく)し,このフィールドに対して独自の検証を追加します.
(function () {
'use strict';
fb.events.form.created.push(function (state) {
state.fields.find(field => field.code === 'calc').validations.push({ // 'calc'には,対象となる数値計算フィールドのフィールドコードが入ります
params: [],
rule: 'calc_validation'
});
return state;
});
fb.addValidators = function (state) {
return {
calc_validation: {
getMessage: function (fieldCode, params) {
return '合計が100%である必要があります.';
},
validate: function (value, params) {
return value === 100;
}
}
};
};
})();
□2つめ
複数のフィールドを組み合わせた独自の検証を加えるという方法です.対象のフィールドが2つある場合を書かせていただきます.
(function () {
'use strict';
const targetFields = ['number', 'number_1']; // 計算対象のフィールドらのフィールドコードを格納した配列
fb.events.form.created.push(function (state) {
targetFields.forEach(targetField => {
state.fields.find(field => field.code === targetField).validations.push({
params: [],
rule: 'num_validation'
});
});
return state;
});
fb.addValidators = function (state) {
return {
num_validation: {
getMessage: function (fieldCode, params) {
return '合計が100%である必要があります.';
},
validate: function (value, params) {
var sum = 0;
targetFields.forEach(targetField => sum += state.record[targetField].value);
return sum === 100;
}
}
};
};
})();