見積書を目的に、テーブル自動計算で、下記のjavaを利用しアプリを活用しています。
問題なく動作をしているのですが、単価(sales)に1,000,000を超えた数値が入力された場合、下記フィールド以外のフィールド個所を打ち直したり消したりすると表記がおかしくなります。(以下、編集といいます。)
例)入力値”1000000”と数値のみを入力
1度目の編集では”1,000,000”となり
2度目の編集では”1,000”となり
これ以降の編集では変化がありません。
数値が変わると問題がありますので何か対策をしたいのですが
方法があるのでしょうか?
ご教授のほどよろしくお願いいたします。
/**
* テーブル:Table
* 単価:price(文字列フィールド)
* 個数:num(数値フィールド)
* 小計:sales(文字列フィールド)
*
* 総計:total(数値フィールド)
*/
(function () {
“use strict”;
function loadJS(src) {
document.write(‘<script type=“text/javascript” src="’ + src + ‘"></script>’);
}
// jQuery の JavaScript ファイル
loadJS(“https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js”);
// 数値→桁区切り
var numberFormat = function (num) {
if (typeof num === ‘number’) {
return num.toString().replace(/^\d+[^.]/, function (t) {
return t.replace(/([\d]+?)(?=(?:\d{3})+$)/g, function (t) {
return t + ‘,’;
});
});
} else {
return num;
}
}
// 桁区切り→数値
var number = function (numberFormatStr) {
if (typeof numberFormatStr === ‘string’) {
return parseInt(numberFormatStr.replace(‘,’, ‘’), 10);
} else {
return numberFormatStr;
}
}
/**
* 計算処理
*/
var myCalculate = function (record) {
var table = record.Table.value;
var total = 0;
for (var i = 0, l = table.length; i < l; i++) {
var row = table[i].value; // テーブルの1行
// 小計を計算
var price = number(row.price.value);
var num = row.num.value;
if (price && num) {
var sales = price * num;
row.sales.value = numberFormat(sales);
total += sales;
} else {
// priceかnumが空の場合はnull
row.sales.value = null;
}
row.price.value = numberFormat(price);
}
record.total.value = total;
};
// イベント
kintone.events.on([“app.record.edit.show”, “app.record.create.show”], function (event) {
// 編集時に計算するイベント
$(document.body).on(‘change’, “input[type=‘text’]”, function () {
var record = kintone.app.record.get();
myCalculate(record.record);
kintone.app.record.set(record);
});
// 無理やりDOM操作で編集不可に
$(document).on(‘click’, ‘.add-row-image-gaia’, function () {
var ele = $(‘.value-139700’).children(); // 小計のclass
ele.addClass(‘disabled-cybozu’);
ele.children(‘input’).attr(‘disabled’, ‘disabled’);
});
// 無理やりDOM操作で行削除イベント
$(document).on(‘click’, ‘.remove-row-image-gaia’, function () {
var record = kintone.app.record.get();
myCalculate(record.record);
kintone.app.record.set(record);
});
return event;
});
// 計算する数値フィールドを編集不可にする
kintone.events.on([“app.record.edit.show”, “app.record.create.show”], function (event) {
var table = event.record.Table.value;
for (var i = 0, l = table.length; i < l; i++) {
table[i].value.sales.disabled = true;
}
event.record.total.disabled = true;
return event;
});
// 登録、編集時の処理
kintone.events.on([“app.record.edit.submit”, “app.record.create.submit”], function (event) {
myCalculate(event.record);
return event;
});
})();