Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.04.2025, 20:38
Кандидат Javascript-наук
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 114

Прибавить значения отмеченных чекбоксов к сумме
Приветствую! Прошу помочь со следующей задачей: Есть вот такая "конструкция" (код ниже). Необходимо к числу 100 500 (оно может быть разным) добавить числа из значений отмеченных чекбоксов. При этом, если снять галочку с чекбокса, то его значение должно вычитаться из этой суммы.
Заранее спасибо!

<div class="Sum">
	<div class="checkbox_item">
		<label>Опция 1 <input type="checkbox" class="dopopt" value="500"></label>
	</div>
	<div class="checkbox_item">
		<label>Опция 2<input type="checkbox" class="dopopt" value="100200"></label>
	</div>
</div>

<span id="fullsum" class="rezult">100 500</span>
Ответить с цитированием
  #2 (permalink)  
Старый 10.04.2025, 23:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,144

сумма выбранных опций
samdo,

<!DOCTYPE HTML>
<html>
<head>
    <title>Untitled</title>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            let fullsums = document.querySelectorAll('.rezult');
            function StrToNum(str) {
                return Number(str.replace(/\D/g, ""))
            }
            function numSplit(el, num) {
                el.textContent = num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
            }
            document.querySelectorAll('.Sum').forEach(
                (sum, i) => {
                    let rezult = fullsums[i];
                    let num = StrToNum(rezult.textContent);
                    sum.querySelectorAll('[checked].dopopt').forEach(({
                        value
                    }) => num += +value);
                    numSplit(rezult, num)
                    sum.addEventListener('change', function(event) {
                            let input = event.target.closest('.dopopt');
                            if (input) {
                                let dop = -input.value;
                                if (input.checked) dop = +input.value;
                                num += dop;
                                numSplit(rezult, num);
                            }
                        }
                    )
                })
        })
    </script>
</head>
<body>
    <div class="Sum">
        <div class="checkbox_item">
            <label>Опция 1 <input type="checkbox" class="dopopt" value="500" ></label>
        </div>
        <div class="checkbox_item">
            <label>Опция 2<input type="checkbox" class="dopopt" value="100200"></label>
        </div>
    </div>
    <span id="fullsum" class="rezult">100 500</span>
    <div class="Sum">
        <div class="checkbox_item">
            <label>Опция 1 <input type="checkbox" class="dopopt" value="500" checked="checked" ></label>
        </div>
        <div class="checkbox_item">
            <label>Опция 2<input type="checkbox" class="dopopt" value="100" checked="checked" ></label>
        </div>
    </div>
    <span id="fullsum" class="rezult">500</span>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 10.04.2025, 23:58
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,806

<div class="Sum">
  <div class="checkbox_item">
    <label>Опция 1 <input type="checkbox" class="dopopt" value="500" checked/></label>
  </div>
  <div class="checkbox_item">
    <label>Опция 2<input type="checkbox" class="dopopt" value="100200"/></label>
  </div>
</div>

<span id="fullsum" class="rezult">100 500</span>

<script>
  (() => {
    const checkboxes = [].slice.call(
      document.querySelectorAll('.Sum .checkbox_item input[type="checkbox"]')
    );
    const resultContainer = document.querySelector('#fullsum');

    if (!resultContainer) {
        return;
    }

    checkboxes.forEach(node => {
        const initialValue = +resultContainer.textContent.replace(/\D+/gim, '');
        
        node.addEventListener('change', () => {
            const sum = checkboxes.reduce((res, node) => {
                return res + (node.checked ? +node.value : 0);
            }, initialValue);

            resultContainer.textContent = sum.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
        });
    });

    checkboxes.at(-1)?.dispatchEvent(new Event('change'));
  })();
</script>

Последний раз редактировалось Nexus, 11.04.2025 в 00:00.
Ответить с цитированием
  #4 (permalink)  
Старый 11.04.2025, 07:15
Кандидат Javascript-наук
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 114

Огромное Вам СПАСИБО!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посчитать значения группы чекбоксов etulpan Общие вопросы Javascript 2 11.02.2017 01:59
Посчитать значения чекбоксов sergylt Общие вопросы Javascript 12 08.02.2016 00:34
Передать значения чекбоксов аяксом Kane jQuery 1 04.01.2014 23:47
значения отмеченных флажков Sveta Общие вопросы Javascript 10 29.10.2012 08:39
mootools получение массива отмеченных чекбоксов diiimonn Библиотеки/Тулкиты/Фреймворки 2 01.09.2011 22:42