За последние 24 часа нас посетили 22536 программистов и 1014 роботов. Сейчас ищут 706 программистов ...

Посчитать общую сумму товаров

Тема в разделе "JavaScript и AJAX", создана пользователем pro100blich, 31 окт 2019.

Метки:
  1. pro100blich

    pro100blich Активный пользователь

    С нами с:
    10 янв 2019
    Сообщения:
    15
    Симпатии:
    0
    Всем привет. Есть у каждого select своя сумма, нужно подсчитать общую сумму этих всех select. В Js новичок, пробовал взять все суммы которые получились и засунуть их в перемену, а потом приравнять к id общей суммы, но увы. И еще, когда выбираешь элемент, он блокируется, но а если случайно нажал, то нужно перезагружать страницу. Может можно сделать, так чтобы можно было очистить выбор каждого поля по о дельности.

    HTML:
    1. <!DOCTYPE html>
    2. <html lang="en">
    3.     <meta charset="UTF-8">
    4.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    5.     <meta http-equiv="X-UA-Compatible" content="ie=edge">
    6.     <link rel="stylesheet" href="styles.css">
    7.     <title>Document</title>
    8. </head>
    9.     <select id="goods" size="4">
    10.         <option value="-">--</option>
    11.         <option value="203" data-id="1">молоко</option>
    12.         <option value="30" data-id="2">ананас</option>
    13.         <option value="40" data-id="3">яблоко</option>
    14.     </select>
    15.     <br>
    16.     Сумма: <span id="summ">0</span> рублей<br>
    17.     Было выбрано:<br>
    18.     <span id="list"></span>
    19.     <br><br>
    20.     <select id="good" size="4">
    21.         <option value="-">--</option>
    22.         <option value="203" data-id="1">пп</option>
    23.         <option value="30" data-id="2">ррр</option>
    24.         <option value="40" data-id="3">яблокоrew</option>
    25.     </select>
    26.     <br>
    27.     Сумма: <span id="summ_two">0</span> рублей<br>
    28.     Было выбрано:<br>
    29.     <span id="list_two"></span>
    30.     <br><br>
    31.     <select id="ool" size="4">
    32.         <option value="-">--</option>
    33.         <option value="203" data-id="1">2око</option>
    34.         <option value="30" data-id="2">2анас</option>
    35.         <option value="40" data-id="3">2локо</option>
    36.     </select>
    37.     <br>
    38.     Сумма: <span id="olo">0</span> рублей<br>
    39.     Было выбрано:<br>
    40.     <span id="list_olo"></span>
    41.     <br><br>
    42.     общая сумма: <span id="ob_summ">0</span> рублей
    43.     <script src="index.js"></script>
    44. </body>
    45. </html>
    Код (Javascript):
    1. window.onload = function(e){
    2. //3 select
    3. var option_ool = document.querySelectorAll("#ool option");
    4. var list_olo = document.querySelector("#list_olo");
    5. var olo = document.getElementById("olo");
    6. var olo_elem = 0;
    7. option_ool.forEach(function(postBox) {
    8.      postBox.addEventListener('click', function() {
    9.      list_olo.innerHTML += this.innerHTML+'<br>';
    10.      this.classList.add("add_olo");
    11.      olo_elem += parseInt(this.getAttribute('data-id'));
    12.      olo.innerHTML = olo_elem;
    13.      this.disabled = true;
    14.     });
    15. })
    16. //2 select
    17. var option_good = document.querySelectorAll("#good option");
    18. var list_two = document.querySelector("#list_two");
    19. var summ_two = document.getElementById("summ_two");
    20. var summ_two_elem = 0;
    21. option_good.forEach(function(postBox) {
    22.      postBox.addEventListener('click', function() {
    23.      list_two.innerHTML += this.innerHTML+'<br>';
    24.      this.classList.add("add_summ_two");
    25.      summ_two_elem += parseInt(this.getAttribute('data-id'));
    26.      summ_two.innerHTML = summ_two_elem;
    27.      this.disabled = true;
    28.     });
    29. })
    30. //1 select
    31. var option = document.querySelectorAll("#goods option");
    32. var list = document.querySelector("#list");
    33. var summ = document.getElementById("summ");
    34. var summa_elem = 0;
    35. option.forEach(function(postBox) {
    36.      postBox.addEventListener('click', function() {
    37.      list.innerHTML += this.innerHTML+'<br>';
    38.      this.classList.add("add_summa");
    39.      summa_elem += parseInt(this.getAttribute('data-id'));
    40.      summ.innerHTML = summa_elem;
    41.      this.disabled = true;
    42.        });
    43.  
    44. })
    45.  
    46. }
     
  2. pro100blich

    pro100blich Активный пользователь

    С нами с:
    10 янв 2019
    Сообщения:
    15
    Симпатии:
    0
    Только что заметил, если убрать size, то все больше ничего не работает, почему так происходит?
     
  3. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Верста кривая, не так это делается. Сейчас попробую что нибудь изобразить.
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @pro100blich вот так это делается, с тебя пивко :)
    HTML:
    1. <!doctype html>
    2. <html lang="en">
    3.   <head>
    4.     <meta charset="utf-8">
    5.     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    6.     <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
    7.  
    8.     <title>Товары</title>
    9.   </head>
    10.   <body>
    11.   <div class="container-fluid">
    12.   <div class="row">
    13.     <div class="col-sm">
    14.         <div class="border p-3">
    15.             <label>Вид товара 1</label>
    16.             <select class="form-control m-2">
    17.                 <option selected disabled>--</option>
    18.                 <option value="1" price="203">молоко</option>
    19.                 <option value="2" price="30">ананас</option>
    20.                 <option value="3" price="40">яблоко</option>
    21.             </select>
    22.             <label>Количество товара 1</label>
    23.             <input type="number" class="form-control m-2" value="1">
    24.             <button type="button" class="btn btn-primary add-product-js">Добавить в корзину</button>
    25.         </div>
    26.         <div class="border p-3">
    27.             <label>Вид товара 2</label>
    28.             <select class="form-control m-2">
    29.                 <option selected disabled>--</option>
    30.                 <option value="4" price="203">пп</option>
    31.                 <option value="5" price="30">ррр</option>
    32.                 <option value="6" price="40">яблокоrew</option>
    33.             </select>
    34.             <label>Количество товара 2</label>
    35.             <input type="number" class="form-control m-2" value="1">
    36.             <button type="button" class="btn btn-primary add-product-js">Добавить в корзину</button>
    37.         </div>
    38.         <div class="border p-3">
    39.             <label>Вид товара 3</label>
    40.             <select class="form-control m-2">
    41.                 <option selected disabled>--</option>
    42.                 <option value="7" price="203">2око</option>
    43.                 <option value="8" price="30">2анас</option>
    44.                 <option value="9" price="40">2локо</option>
    45.             </select>
    46.             <label>Количество товара 3</label>
    47.             <input type="number" class="form-control m-2" value="1">
    48.             <button type="button" class="btn btn-primary add-product-js">Добавить в корзину</button>
    49.         </div>
    50.     </div>
    51.     <div class="col-sm">
    52.         <table class="table table-bordered">
    53.             <thead class="thead-dark">
    54.                 <tr>
    55.                     <th scope="col">Товар</th>
    56.                     <th scope="col">Количество</th>
    57.                     <th scope="col">Цена</th>
    58.                 </tr>
    59.             </thead>
    60.             <tbody></tbody>
    61.         </table>  
    62.     </div>
    63.   </div>
    64.    </div>
    65. </body>
    66. </html>
    Код (Javascript):
    1.  let result = [],
    2.             tbody = document.querySelector("tbody");
    3.  
    4.         document.onclick = function(event) {
    5.             let target = event.target,
    6.                 add = target.classList.contains("add-product-js");
    7.  
    8.             if(add){
    9.                 let product = target.parentNode.querySelector("select");
    10.                     price = product.options[product.selectedIndex].getAttribute('price');
    11.                     i = product.options[product.selectedIndex].value,
    12.                     qual = target.parentNode.querySelector("input").value,
    13.                     name = product.options[product.selectedIndex].innerHTML,
    14.                     summ = price * qual;
    15.  
    16.                 result[i] = {
    17.                     'summ' : summ,
    18.                     'name' : name,
    19.                     'qual' : qual
    20.                 }
    21.              
    22.                 let tr = '',
    23.                     full = 0;
    24.  
    25.                 result.forEach(function(element) {
    26.                     tr += '<tr>'
    27.                         + '<td>' + element.name + '</td>'
    28.                         + '<td>' + element.qual + '</td>'
    29.                         + '<td>' + element.summ + '</td>'
    30.                     + '</tr>';
    31.  
    32.                     full += element.summ;
    33.                 });
    34.  
    35.                 tr += '<tr>'
    36.                     + '<td colspan="3"> Сумма: ' + full + '</td>'
    37.                 + '</tr>';
    38.  
    39.                 tbody.innerHTML = tr;
    40.              
    41.             }
    42.         }
     
  5. pro100blich

    pro100blich Активный пользователь

    С нами с:
    10 янв 2019
    Сообщения:
    15
    Симпатии:
    0
    Руку бы тебе пожал,спасибо. Учебник не посоветуешь или видео-курсы по JS
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @pro100blich надо кодить, кодить, кодить, с опытом все придет.
     
  7. pro100blich

    pro100blich Активный пользователь

    С нами с:
    10 янв 2019
    Сообщения:
    15
    Симпатии:
    0
    ОК, буду пробовать:)