При использовании раздела флажков в asp.net в виде сетки со следующим кодом. не в состоянии посчитать сумму суммы, например,
если строка сетки имеет значение 1 001 870,00, то получение результат как 1
если строка сетки имеет значение 976 000, то получаем результат 976 000
я использую следующую функцию сценария,
function GetSelected() {
debugger;
var grid = document.getElementById("<%=grvGroup.ClientID%>");
var checkBoxes = grid.getElementsByTagName("INPUT");
var amountFC = 0;
var amountVAT = 0;
var amountSUMTOT = 0;
var countSelect = 0;
var totalValAmount = 0;
if (grid.rows.length > 0) {
for (var i = 1; i < grid.rows.length; i++) {
var checkBoxes = grid.rows[i].getElementsByTagName('input');
var checkedid = checkBoxes[0].getAttribute('id');
var checkbox = document.getElementById(checkedid);
if (checkbox.checked) {
Amt = grid.rows[i].cells[5].innerText.replace(",", "");
amountFC += parseFloat(Amt);
Amt = grid.rows[i].cells[6].innerText.replace(",", "");
amountVAT += parseFloat(Amt);
countSelect++;
}
}
jQuery('#<%=txtTotalAmount.ClientID %>').val(amountFC);
jQuery('#<%=txtTotalVat.ClientID %>').val(amountVAT);
var totalAmount = parseFloat(jQuery('#<%=txtTotalAmount.ClientID %>').val());
var totalVat = parseFloat(jQuery('#<%=txtTotalVat.ClientID %>').val());
var totalSum = totalAmount + totalVat;
jQuery('#<%=txtPayableAmount.ClientID %>').val(totalSum);
}
if (grid.rows.length - 1 == countSelect) {
document.getElementById("ContentPlaceHolder1_checkallselect").checked = true;
}
else {
document.getElementById("ContentPlaceHolder1_checkallselect").checked = false;
}
}
В документации JS-функции replace()
мы можем прочитать следующее:
Строковый шаблон будет заменен только один раз. Чтобы выполнить глобальную выполнить поиск и замену, использовать регулярное выражение с флагом g или использовать вместо этого replaceAll().
Это два варианта удаления всех ,
со своего номера.
grid.rows[i].cells[5].innerText.replaceAll(",", "");
grid.rows[i].cells[5].innerText.replace(/,/g, "");
второй у меня не работал, а первый работает отлично. и звучит хорошо для ответа, спасибо за поддержку.
Пожалуйста, следуйте принципу DRY (не повторяйтесь).
Лучше всего создать полифилл для объекта окна с именем, например, parseFloatFromString(). Поместите этот код при загрузке вашего проекта.
Для вашего случая:
parseFloatFromString(grid.rows[i].cells[5].innerText);
// polyfill parseFloatFromString() now available in window object as parseFloat()
if (!('parseFloatFromString' in window)){
Window.prototype.parseFloatFromString = function(numberInString){
try {
return +(numberInString.replaceAll(",", ""));
} catch ( err ) { console.error(err) };
}
}
console.info(parseFloatFromString('1,001,870.22'))
replace(",", "");
это заменит только 1 запятую. Вы можете использоватьreplaceAll
,. например. может помочь такая функция, как ->const asNum = v => parseFloat(v.replaceAll(",",""));
.