Я знаю, что этот вопрос задавали, но каждый сценарий достаточно разнообразен, чтобы сбить меня с толку.
Когда пользователь меняет выбор, то: #cost + #donation = #total
Когда пользователь вводит #donation, тогда: #cost + #donation = #total
У меня он работает, но сумма конкатенируется до «30,00 долларов США 20,00 долларов США» вместо добавления 2 к «50,00 долларов США».
Я считаю, что parseFloat () имеет к этому отношение.
Спасибо!
<select class = "custom-select d-block w-100" id = "type" name = "type" required>
<input type = "text" class = "form-control" id = "cost" name = "cost" disabled>
<input type = "text" class = "form-control" id = "donation" name = "donation">
<input type = "text" class = "form-control" id = "total" name = "total" disabled>
Вот что я собрал по кусочкам:
$("#type").change(function(){
// this changes the input id=cost to match the select field id=type
var typevalue = $( "#type" ).val();
$('input[name=cost]').val(typevalue);
});
$('#donation').keyup(function() {
$(this).val(function(i,v) {
return '$' + v.replace('$',''); //remove exisiting, add back.
});
});
$(document).ready(function(){
$('#type').change(calculate);
$('#donation').keyup(calculate);
});
function calculate(e)
{
$('#total').val($('#cost').val() + $('#donation').val());
}

Попробуйте удалить знак доллара из числа перед добавлением: String.replace("$",""), затем проанализируйте его с помощью parseFloat(value)
тогда вам нужно сначала разобрать его с помощью parseFloat(var) :)
Вы можете заключить свое поле ввода в <label> и добавить туда знак $.
Я бы также использовал <input type='number'>, чтобы упростить жизнь вашим клиентам.
Также измените селектор стоимости на $('#cost')
Преобразуйте значения в целые числа или числа с плавающей запятой, чтобы убедиться, что вы работаете с числами:
function calculate(e)
{
var cost = parseInt($('#cost').val().replace('$',''));
var donation = parseInt($('#donation').val().replace('$',''));
var total = cost + donation;
$('#total').val('$'+ total );
}
удаление знака доллара дает мне "30.0020.00"