Проблема в том, что вы обновляете .counter
и .sum
только тогда, когда вызывается mainfunction
, изменяя слайдер с фруктами. Это также необходимо делать, когда значение клиентов также меняется, так как количество клиентов, использованных в этом расчете, изменилось.
Как таковой, имеет смысл написать общую функцию, которая обрабатывает событие input
всех ползунков и показывает соответствующее количество и сумму для каждого из них. Примерно так:
var $sliders = $('.slider').on('input', function() {
$sliders.each(function() {
var $slider = $(this);
var amount = $slider.val();
var $container = $slider.closest('div');
$container.find('.counter').text(amount);
if ($slider.hasClass('fruit')) {
var price = $slider.data('price');
$container.find('.sum').text(amount * price * $customers.val());
}
});
});
var $customers = $sliders.filter('.customers');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Apples: 5$</p>
<div>
<input class="slider fruit" data-price="5" type="range" value="0" min="0" max="10">
<span class="counter">0</span><br>
<span class="sum">0</span>
</div>
<p>Oranges: 3$</p>
<div>
<input class="slider fruit" data-price="3" type="range" value="0" min="0" max="10">
<span class="counter">0</span><br>
<span class="sum">0</span>
</div>
<p>Customers:</p>
<div>
<input class="slider customers" type="range" value="0" min="0" max="10">
<span class="counter">0</span><br>
</div>
Обратите внимание на использование общих классов на ползунках, чтобы помочь обобщить логику, а также цикл, который проходит и обновляет их все, когда любое из их значений было изменено.