Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.11.2019, 18:25
Новичок на форуме
Отправить личное сообщение для pro100blich Посмотреть профиль Найти все сообщения от pro100blich
 
Регистрация: 05.11.2019
Сообщений: 1

Цикл. Добавить несколько форм.
Всем привет форумчане. Сразу скажу не особо понимаю в JS, больше в серверной части(PHp). Есть некая форма в ней есть, 3 селекта. 2-3 работают без нареканий и вмешательств не требуют. Но вот с первым надо сделать так, чтобы при нажатие Кнопки
<button>Добавить еще</button>
Происходило добавление еще одной формы такой же, только к select name,input name прибавлялось значения $i(число от 1 до 20), то бишь select name="test_select_$i",input name="start_date_$i".
И при каждом нажатие на кнопку Добавить еще происходило $i++.
Конечный результат.

*** Удалено. Огромные картинки ***

Так как классы убраны то сумма считаться не будет. Могли бы вы добавить к итоговой сумме новые селекты.

<!DOCTYPE html>
<html lang="ru">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Bootstrap DaeteTimePicker</title>
   <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
   <link rel="stylesheet" href="style.css">

  </head>
<body>
  <style type="text/css">
    .close{
  cursor: pointer;
}
  </style>
  <div class="contener">
    <div class="col">
      <form class="form-horizontal" enctype='multipart/form-data'  action='' method='POST'>
        <fieldset>
          <legend>Программа1</legend>
          <div class="form-group row">
            <div class="col">
              <div class="">
                <select class="form-control" name="test_select">
                  <option data-price="100" value="1">1</option>
                  <option data-price="200" value="2">2</option>
                  <option data-price="300" value="3">3</option>
                  <option data-price="300" value="4">4</option>
                  <option data-price="300" value="5">5</option>
                  <option data-price="300" value="6">6</option>
                  <option data-price="300" value="7">7</option>
                  <option data-price="300" value="8">8</option>
                  <option data-price="300" value="9">9</option>
                  <option data-price="300" value="11">11</option>
                  <option data-price="300" value="12">12</option>
                  <option data-price="300" value="13">13</option>
                  <option data-price="300" value="14">14</option>
                  <option data-price="300" value="15">15</option>
                  <option data-price="300" value="16">16</option>
                  <option data-price="300" value="17">17</option>
                  <option data-price="300" value="18">18</option>
                  <option data-price="300" value="19">19</option>
                  <option data-price="300" value="20">20</option>
                </select>
                <div class="bg-danger">Сумма: <span class="summ">0</span> руб.</div>
                <div class="bg-warning">Было выбрано:</div>
                <div class="list bg-warning"></div>
              </div>
            </div>
            <div class="col">
              Начало <input type="date" name="start_date" class="form-control">
            </div>
            <div class="col">
              Конец <input type="date" name="end_date" class="form-control">
            </div>
            <div class="col">Номер <input type="text" name="num" class="form-control">
            </div>
          </div>

          <button>Добавить еще</button>
        </fieldset>
        <fieldset>
          <legend>Программы2</legend>
          <div class="form-group row">
            <div class="col">
              <div class="box-select">
                <select class="select form-control" >
                   
                  <option data-price="300" value="13">13</option>
                  <option data-price="300" value="14">14</option>
                  <option data-price="300" value="15">15</option>
                  <option data-price="300" value="16">16</option>
                  <option data-price="300" value="17">17</option>
                  <option data-price="300" value="18">18</option>
                  <option data-price="300" value="19">19</option>
                  <option data-price="300" value="20">20</option>
                </select>
                <div class="bg-danger">Сумма: <span class="summ">0</span> руб.</div >
               <div class="bg-warning">Было выбрано:</div>
                <div class="list bg-warning"></div>
              </div>
            </div>
          </div>

          </fieldset>
          <fieldset>
            <legend>Программы3</legend>
            <div class="form-group row">
              <div class="col">
              <div class="box-select">
                <select class="select form-control" >
                  <option data-price="100" value="1">1</option>
                  <option data-price="200" value="2">2</option>
                  <option data-price="300" value="3">3</option>
                  <option data-price="300" value="4">4</option>
                  <option data-price="300" value="5">5</option>
                  <option data-price="300" value="6">6</option>
                  <option data-price="300" value="7">7</option>
                  <option data-price="300" value="8">8</option>
                  <option data-price="300" value="9">9</option>
                  <option data-price="300" value="11">11</option>
                  <option data-price="300" value="12">12</option>
                  <option data-price="300" value="13">13</option>
                  <option data-price="300" value="14">14</option>
                  <option data-price="300" value="15">15</option>
                  <option data-price="300" value="16">16</option>
                  <option data-price="300" value="17">17</option>
                  <option data-price="300" value="18">18</option>
                  <option data-price="300" value="19">19</option>
                  <option data-price="300" value="20">20</option>
                </select>
                <div class="bg-danger">Сумма: <span class="summ">0</span> руб.</div>
                <div class="bg-warning">Было выбрано:</div>
                <div class="list bg-warning"></div>
              </div>
              </div>
            </div>

 <div class="form-group row">
          <div class="col-md-2">
            <div class="input-group">
              <div class="input-group-text">ИТОГ</div>
              <span class="total_span form-control" id="exampleInputAmount">0</span>
              <div class="input-group-text">.00</div>
            </div>
          </div>
          <button type="submit" name="button" class="btn btn-primary col-md-2">Оплатиь</button>
        </div>
      </form>
    </div>
  </div>
  <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

(function() {
    document.querySelectorAll('.box-select').forEach(e => {
        e.querySelector('.select').insertAdjacentHTML('afterBegin', `<option disabled selected></option>`);
        [...e.querySelector('.select').children].forEach((e,i) => e.dataset.id = i + 1 );
    });
})();

function calc(e) {
    let target = e.target.selectedOptions[0];
    if (target.parentElement.classList.contains('select')) {
        let summ = this.parentElement.querySelector('.summ');
        let new_div = `<div class="position">${target.outerHTML.replace(/option/g,'span')}<span class="close">X</span></div>`;
        target.disabled = true;
        this.children[0].selected = true;
        this.parentElement.querySelector('.list').insertAdjacentHTML('beforeEnd', new_div);
        summ.textContent = +summ.textContent + +target.dataset.price;
    }
    total();
}

function del(e) {
    if (e.target.classList.contains('close')) {
        let data_id = +e.target.previousElementSibling.dataset.id;
        let parent = e.currentTarget.parentElement;
        parent.querySelector(`.select [data-id="${data_id}"]`).disabled = false;
        parent.querySelector(`.select`).children[0].selected = true;
        parent.querySelector('.summ').textContent = +parent.querySelector('.summ').textContent - +e.target.previousElementSibling.dataset.price;
        e.target.closest('.position').remove();
    }
    total();
}

function total() {
    document.querySelector('.total_span').textContent = [...document.querySelectorAll('.summ')].map(e => +e.textContent).reduce((a,b) => a + b);
}

document.querySelectorAll('.box-select .select').forEach(e => e.addEventListener('change', calc) );
document.querySelectorAll('.box-select .list').forEach(e => e.addEventListener('click', del) );

Последний раз редактировалось ksa, 06.11.2019 в 12:30. Причина: Огромные картинки
Ответить с цитированием
  #2 (permalink)  
Старый 05.11.2019, 19:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от pro100blich
больше в серверной части(PHp)
Занимаетесь им, а видимо не в курсе, что именовать поля для РНР как name="test_select_$i", это грех. И не формы плодить надо, а клонировать набор полей с именами name="test_select[]". На сервере получите массивы полей под соответствующими ключами.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл отрабатывает несколько раз stim644 Angular.js 3 18.02.2019 17:55
Как добавить в append цикл Cdelphi78 Элементы интерфейса 5 02.03.2016 22:40
как сделать чтобы работало несколько форм landerorly Общие вопросы Javascript 9 10.10.2014 08:56
Knockout добавить несколько классов svs Библиотеки/Тулкиты/Фреймворки 0 10.07.2014 16:22
как в динамически добавляемый элемент добавить еще несколько? sadonn Элементы интерфейса 1 29.05.2010 12:07