javascript - 实时计算 - Javascript 中的购物车

标签 javascript forms shopping-cart

我一直在尝试制作一个在线表格,供客户选择他们想要的菜肴以及应该容纳多少人。但是我在让它只与 Javascript 一起工作时遇到了一些麻烦。

我的想法是做这样的事情:

  • 如果菜品被选中
  • 然后获取下拉菜单的值
  • 计算每道菜的总数
  • 对每道菜都这样做
  • 然后在 calculateTotal() 函数中我将对所有小计求和

function priceDish1() {
  var quantity = 0;
  var totalPriceDish1 = 0;
  var dishPrice = 19;
  var quantity = document.getElementById("quantityDish1").value;
  var theDish1 = document.getElementById("dish1");

  if (theDish1.checked == true) {
    totalPriceDish1 = quantity * dishPrice;
  }

  return totalPriceDish1;
}

function priceDish2() {
  var quantity = 0;
  var totalPriceDish1 = 0;
  var dishPrice = 19;
  var quantity = document.getElementById("quantityDish1").value;
  var theDish1 = document.getElementById("dish1");

  if (theDish1.checked == true) {
    totalPriceDish1 = quantity * dishPrice;
  }
  return totalPriceDish1;
}

function calculateTotal() {
  var theTotalPrice = totalPriceDish1() + totalPriceDish2();
  document.getElementById('totalPrice').innerHTML = "Total $" + theTotalPrice;

}
<div id="div">
  <form action="" id="priceForm">
    <label class="dishes"><input type="checkbox" id="dish1" value="number1"> Dish Name 1</label><br>
    <label class="labelQuantPeople">Number of Dishes</label><br>
    <select id="quantityDish1" name='numberPeoplel1' onchange="calculateTotal()">
      <option class="quantDish1" value="0">0</option>
      <option class="quantDish1" value="1">1</option>
      <option class="quantDish1" value="2">2</option>
      <option class="quantDish1" value="3">3</option>
      <option class="quantDish1" value="4">4</option>
      <option class="quantDish1" value="5">5</option>
      <option class="quantDish1" value="6">6</option>
      <option class="quantDish1" value="7">7</option>
      <option class="quantDish1" value="8">8</option>
      <option class="quantDish1" value="9">9</option>
      <option class="quantDish1" value="10">10</option>
    </select><br>
    <label class="dishes"><input type="checkbox" id="dish2" value="number2"> Dish Name 2</label><br>
    <label class="labelQuantPeople">Number of Dishes</label><br>
    <select id="quantityDish2" name='numberPeoplel2' onchange="calculateTotal()">
      <option class="quantDish2" value="1">1</option>
      <option class="quantDish2" value="2">2</option>
      <option class="quantDish2" value="3">3</option>
      <option class="quantDish2" value="4">4</option>
      <option class="quantDish2" value="5">5</option>
      <option class="quantDish2" value="6">6</option>
      <option class="quantDish2" value="7">7</option>
      <option class="quantDish2" value="8">8</option>
      <option class="quantDish2" value="9">9</option>
      <option class="quantDish2" value="10">10</option>
    </select><br>
  </form>
</div>
<p id="totalPrice"></p>

提前致谢!

最佳答案

这是我的版本。它可以工作(如果我正确地得到了你想要的)但请注意它没有经过适当的测试。也可能存在一些与跨浏览器兼容性相关的问题。德里克在他的评论中写的内容也很重要。因此,从下面的代码中,您可以首先采用所有方法和复选框魔术(我的意思是不要复制粘贴它 - 自己调整它):

 function getDishPrice(dish) {
     var quantity = dish.lastChild.lastChild.value ? dish.lastChild.lastChild.value : 0,
         price = dish.dataset.price ? dish.dataset.price : 0;
     return dish.firstChild.checked ? quantity * price : 0;
 }

function calculateTotal() {
    var dishes = Array.prototype.slice.call(document.querySelectorAll(".dishes")),
        total = 0;
    dishes.filter(function(dish) {
        return dish.firstChild.checked;
    }).forEach(function(dish) {
        total += getDishPrice(dish);
    });    
    document.getElementById('totalPrice').textContent = "Total: $" + total;
}
var selects = document.getElementsByTagName("select"),
    inputs = document.getElementsByTagName("input"),
    i;
for (i = 0; i < selects.length; i++) {
    selects[i].addEventListener('change', calculateTotal, false);
    inputs[i].addEventListener('change', calculateTotal, false);
}
#priceForm label {
  display: block;
}
#priceForm label div {
  display: none;
}
#priceForm label input[type="checkbox"]:checked + div {
  display: block;
}
<div id="div">
    <form action="" id="priceForm" >
            <label class="dishes" data-price="10"><input type="checkbox" id="dish1"> Dish Name 1 <div>Number of Dishes
                <select id="quantityDish1">
                    <option class="quantDish1" value="0">0</option>
                    <option class="quantDish1" value="1">1</option>
                    <option class="quantDish1" value="2">2</option>
                    <option class="quantDish1" value="3">3</option>
                    <option class="quantDish1" value="4">4</option>
                    <option class="quantDish1" value="5">5</option>
                    <option class="quantDish1" value="6">6</option>
                    <option class="quantDish1" value="7">7</option>
                    <option class="quantDish1" value="8">8</option>
                    <option class="quantDish1" value="9">9</option>
                    <option class="quantDish1" value="10">10</option>
                </select></div></label>
                
            <label class="dishes" data-price="20"><input type="checkbox" id="dish2"> Dish Name 2 <div>Number of Dishes
                <select id="quantityDish2">
                    <option class="quantDish2" value="0">0</option>
                    <option class="quantDish2" value="1">1</option>
                    <option class="quantDish2" value="2">2</option>
                    <option class="quantDish2" value="3">3</option>
                    <option class="quantDish2" value="4">4</option>
                    <option class="quantDish2" value="5">5</option>
                    <option class="quantDish2" value="6">6</option>
                    <option class="quantDish2" value="7">7</option>
                    <option class="quantDish2" value="8">8</option>
                    <option class="quantDish2" value="9">9</option>
                    <option class="quantDish2" value="10">10</option>
                    </select></div></label>
    </form>
</div>
<p id="totalPrice">Total: $0</p>

关于javascript - 实时计算 - Javascript 中的购物车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46517286/

相关文章:

html - Paypalform提交被转发到默认的paypal网站

html - Bootstrap Multicolumn Form-horizo​​ntal Styling only one one col-

javascript - 为什么我在 npm start 上收到以下错误

javascript - (JavaScript) 为什么 while 循环中 'if' 内的 continue 语句会使浏览器崩溃?

javascript - 使用javascript访问不同页面上的表单元素

ruby-on-rails - 在 Ruby on Rails 中持久化购物车

mysql - 如何在mysql中为产品添加类别

php - 购物车 $_SESSION 问题

javascript - 使用三元运算符输出字符串

javascript - 检测宽度 : auto in jQuery