Javascript: как я могу отобразить общую стоимость введенных в него значений?

Я создаю проект, который будет служить продуктовым магазином. Клиент нажимает на флажки, а затем нажимает кнопку отправки, вызывая предупреждение, чтобы показать значения, которые были нажаты, и общую цену.

home.html

    <form action = "{% url 'js' %}" method = "POST" id = "menuForm">
      {% for post in posts %}
        {% if post.quantity > 0 %}
            <article class = "media content-section">
              <div class = "media-body">
                <div class = "article-metadata">
                  <a class = "mr-2">{{ post.category }}</a>
                </div>
                <h2><a class = "article-title" >{{ post.title }}</a></h2>
                <p class = "article-content"> Price: ${{ post.Price }}</p>
                <p class = "article-content"> Sale: ${{ post.Sale }}</p>
                <input type = "checkbox" id = "product_{{ post.id }}" value = "{{ post.title }}" form = "menuForm" name = "products" > Inventory count: {{ post.quantity }}
              </input>
              </div>
            </article>
        {% else %}
        {% endif %}
      {% endfor %}
      <button id = "btn" type = "submit" form = "menuForm">Confirm Purchase</button>
    </form>
<script src = "{% static "JS/javascript.js" %}" type = "text/javascript"></script>

javascript.js

function getSelectedCheckboxValues(name) {  
    const checkboxes = document.querySelectorAll(`input[name = "${name}"]:checked`);
    let values = [];
    checkboxes.forEach((checkbox) => {
        values.push(checkbox.value);
    });
    return [values];
    console.info(getSelectedCheckboxValues('products'))
}

console.info(values)
var price = 0;
var tPrice = 0;
for (var i = 0;i<values.length;i++){
    if (values[i] == 'Milk'){
        var MPrice = 3.99
        tPrice = price+MPrice;
    }
    if (values[i] == 'Cheese'){
        var CPrice = 4.50
        tPrice = price + CPrice;
    }
    if (values[i] == 'Yogurt'){
        var YPrice = 1.99
        tPrice = price + YPrice;
        }
console.info(values[i])
}

const btn = document.querySelector('#btn');
btn.addEventListener('click', (event) => {
    alert('You ordered: ' + getSelectedCheckboxValues('products')+
        '\nTotal Price: $' + tPrice );
});

Моя проблема на данный момент заключается в том, что в предупреждении отображаются только выбранные значения. Однако он не печатает общую цену. Если кто-нибудь может помочь мне с этим, я был бы очень признателен.

Пожалуйста, разместите соответствующий пример кода в виде простого HTML, CSS и JS. Удалить код джанго

Ahmad Habib 15.12.2020 12:05

Мой проект построен на Django, поэтому я не смогу опубликовать код после удаления его частей Django. Я извиняюсь, если это делает это более запутанным

Yahya 15.12.2020 12:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
821
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно внести некоторые изменения в ваш скрипт.

  • ваша переменная values объявлена ​​внутри функции getSelectedCheckboxValues, поэтому вы не можете получить доступ к этой переменной вне функции.

Так что просто переместите все в свою функцию getSelectedCheckboxValues и верните объект, который содержит valuestPrice

function getSelectedCheckboxValues(name) {
    const checkboxes = document.querySelectorAll(`input[name = "${name}"]:checked`);
    let values = [];
    checkboxes.forEach((checkbox) => {
        values.push(checkbox.value);
    });

    var price = 0;
    var tPrice = 0;
    for (var i = 0; i < values.length; i++) {
        if (values[i] == 'Milk') {
            var MPrice = 3.99
            tPrice += price + MPrice;
        }
        if (values[i] == 'Cheese') {
            var CPrice = 4.50
            tPrice += price + CPrice;
        }
        if (values[i] == 'Yogurt') {
            var YPrice = 1.99
            tPrice += price + YPrice;
        }
        console.info(values[i])
    }

    return {values, tPrice};
}

const btn = document.querySelector('#btn');
btn.addEventListener('click', (event) => {
    const result = getSelectedCheckboxValues('products');
    alert('You ordered: ' + result.values +
        '\nTotal Price: $' + result.tPrice);
});

Другие вопросы по теме