РЕДАКТИРОВАТЬ: мой первоначальный ответ был частично правильным, в том, что он изменил значение, но это не исправило более серьезную ошибку, которую я сейчас объясню.
Причина, по которой мое первоначальное исправление заставляет когда-либо ячейку иметь одинаковое значение, заключается в том, что метод jQuery $ возвращает каждый элемент, который соответствует данному селектору. Однако при вызове val () вы получите только значение первого сопоставленного элемента, а установка значения путем вызова val (value) установит значение каждого сопоставленного элемента.
Решение состоит в том, чтобы выполнить замену над каждым (), которая затем будет очищать только один элемент (this
). Если вы также хотите очистить итоговые ячейки, вы должны сделать , что в каждом () и использовать ".ttl" + this
в качестве селектора вместо this
.
$('.calc').keyup(function(){
var classArray = $(this).attr('class').split(' ');
//Sanitize out here, so we only affect one element.
var singleCellVal = $(this).val()
singleCellVal.replace(/[A-Za-z$-,]/g, "");
$(this).val(singleCellVal);
$.each(classArray, function(){
var totalsum = $('.'+this).sum();
$('.ttl'+this).val(Number(totalsum).toFixed(2));
});
//Finding the grandtotal
var grandTotal = $('.row26').parent().
children('td:last').children( 'input');
var sum = $('.row25').parent().children( 'td').children('.calc').sum();
grandTotal.val(Number(sum).toFixed(2));
});
То, что вы хотите, это
var value = $('.'+this).val();
value.replace(/[A-Za-z$-,]/g, "");
$('.' + this).val(value);
$ в классе символов в порядке, большинство метасимволов в регулярных выражениях не являются специальными в классах символов. Однако «$-,
» будет соответствовать любым символам, которые находятся «между» $
и ,
. Я предполагаю, что это то, что вы хотите, но если вы хотите сопоставить только $
и ,
и -
, то вам следует изменить эту часть на "$,-
" (т.е. /[A-Za-z$,-]/g
). -
в конце класса символов будет соответствовать -
, где-либо еще рассматривается как диапазон, если вы не избежите его (\-
).