Я пытаюсь вычесть 2 столбца и получить значение в 3-м столбце. У меня есть следующий код, который работает, пока в поле ввода не используются значения, разделенные запятыми.
const sum = $inputs => $inputs.get().reduce((a, el) => a + (parseInt(el.value, 10) || 0), 0);
function calcTableBox() {
const $table = $('#TableBox');
const $row = $table.find('> div');
$row.each(function() {
const $this = $(this);
const limiter = parseInt($this.find('.limiter').val(), 10); // parseInt at radix decimal
const used = parseInt($this.find('.used').val(), 10);
const remaining = limiter - used;
if (!isNaN(remaining)) $this.find('.remaining').val( remaining );
});
$table.find('.totallimiter').val(sum($table.find('.limiter')));
$table.find('.totalused').val(sum($table.find('.used')));
$table.find('.totalrem').val(sum($table.find('.remaining')));
}
jQuery($ => { // DOM ready
$(".limiter, .used").on("input", calcTableBox);
calcTableBox(); // Init
});
function addComma(values) {
var v = values.value && parseFloat(values.value.replace(/,/g, ''));
values.value = v.toLocaleString("en-US");
}
.TableBox {
display: table;
border-spacing: 6px;
}
.TableBox input[type=text] {
max-width: 80px;
}
.TableBox>div {
display: table-row;
border-spacing: 5px
}
.TableBox>div>div {
display: table-cell;
margin: 4px;
}
[readonly] {
color: #aaa;
}
<div id="TableBox" class="TableBox" style="width: 100%;">
<div>
<div></div>
<div>Limiter</div>
<div>Used</div>
<div>Remaining</div>
</div>
<div>
<div></div>
<div><input type="text" class="limiter" value="32"></div>
<div><input type="text" class="used" value="23"></div>
<div><input type="text" class="remaining" readonly></div>
</div>
<div>
<div></div>
<div><input type="text" class="limiter" value="" onkeyup="addComma(this);"></div>
<div><input type="text" class="used" value="" onkeyup="addComma(this);"></div>
<div><input type="text" class="remaining" readonly></div>
</div>
<div>
<div></div>
<div><input type="text" class="limiter" value="5" onkeyup="addComma(this);"></div>
<div><input type="text" class="used" value="3" onkeyup="addComma(this);"></div>
<div><input type="text" class="remaining" readonly></div>
</div>
<div>
<div></div>
<div><input type="text" class="limiter" value="" onkeyup="addComma(this);"></div>
<div><input type="text" class="used" value="" onkeyup="addComma(this);"></div>
<div><input type="text" class="remaining" readonly></div>
</div>
<div>
<div>Total Cycles: </div>
<div><input type="text" class="totallimiter" readonly></div>
<div><input type="text" class="totalused" readonly></div>
<div><input type="text" class="totalrem" readonly></div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.4.1.js"></script>
Здесь первая строка работает нормально, так как я не добавил к значениям запятые. Тем не менее, во всех других строках я добавляю запятые. Поскольку значение является строкой, я удаляю запятые и выполняю parseInt для него.
function calcTableBox() {
const $table = $('#TableBox');
const $row = $table.find('> div');
$row.each(function() {
const $this = $(this);
// const limiter = parseInt($this.find('.limiter').val(), 10); // parseInt at radix decimal
const limiter = $this.find('.limiter').val();
limiter = limiter.replace(/,/g, "");
limiter = parseInt(limiter);
// const used = parseInt($this.find('.used').val(), 10);
const used = jQuerythis.find(".used").val();
used = used.replace(/,/g, "");
used = parseInt(used);
const remaining = limiter - used;
if (!isNaN(remaining)) $this.find('.remaining').val( remaining );
});
$table.find('.totallimiter').val(sum($table.find('.limiter')));
$table.find('.totalused').val(sum($table.find('.used')));
$table.find('.totalrem').val(sum($table.find('.remaining')));
}
Проблема в том, что когда я добавляю запятые, он возвращает NaN для моих значений. Я читаю посты об этом, и он просто просит меня установить идентификатор окна и использовать его, чтобы получить значения, которые я уже делаю. Любая помощь приветствуется! Спасибо.