Передать в textContent input.value

Есть три блока

<div class="block1">
<h2 data-price="1"  class="price">500</h2>
<button data-calculate="1">рассчитать</button>
</div>
<div class="block2">
<h2 data-price="2" class="price">600</h2>
<button data-calculate="2">рассчитать</button>
</div>
<div class="block3">
<h2 data-price="3" class="price">700</h2>
<button data-calculate="3">рассчитать</button>
</div>

И попап открывается один при нажатии на кнопку по одному из блоков

<div class="pop-up">
<input placeholder="введите число" type="number"/>
<button>Сохранить</button>
</div>

Вопрос, как сделать так, чтобы при вводе числа в инпут попапа и нажатии сохранить, менялась цена в том блоке где была нажата кнопка рассчитать? Помогите пожалуйста начинающему кодеру.


Ответы (1 шт):

Автор решения: ΝNL993

В моём примере я провёл операцию сложения, вы же измените её на ту которая вам нужна (Эта строчка: (+num.value) + (+current.innerText), пример операции деления текущего числа, на то которые ввёл пользователь: (+num.value) / (+current.innerText)).

let index = 0,
  num = document.querySelector('#num')

document.querySelectorAll('.block').forEach(e => {
  let btn = e.children[1]
  btn.addEventListener('click', () => {
    hidePop()
    index = btn.dataset.calculate
  })
})

document.querySelector('.pop-up button').addEventListener('click', e => {
  let current = document.querySelector(`h2[data-price="${index}"]`)
  current.innerText = (+num.value) + (+current.innerText)
  hidePop()
})

function hidePop() {
  let pop = document.querySelector('.pop-up')
  pop.style.display = pop.style.display === 'none'
    ? 'block'
    : 'none'
}
.pop-up {
  position: fixed;
  top: 0px;
  left: 0px;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, .5);
}

.pop-up input {
  margin-top: 40vh;
  margin-left: 25vw;
}
<div class="block1 block">
<h2 data-price="1"  class="price">500</h2>
<button data-calculate="1">рассчитать</button>
</div>
<div class="block2 block">
<h2 data-price="2" class="price">600</h2>
<button data-calculate="2">рассчитать</button>
</div>
<div class="block3 block">
<h2 data-price="3" class="price">700</h2>
<button data-calculate="3">рассчитать</button>
</div>

<div class="pop-up" style="display: none">
<input id="num" placeholder="введите число" type="number"/>
<button>Сохранить</button>
</div>

Объяснение:

Тут всё легко, для начала я добавил инпуту в попапе id для удобного селекта в скрипте, ну и конечно для каждого блока добавил класс block. Далее в самом скрипте я объявил две переменные index(Текущий выбранный индекс дива) и само поле, где пользователь вводит число. Далее я выбрал все блоки и добавил каждой кнопке в блоке слушателя события клика, там для начала выполняется функция hidePop которая прячет/показывает попап, а далее сохраняется выбранный индекс в переменную index. После я добавил событие клика на кнопку сохранить в попапе, в котором для начала я сохранил текущий выбранный ценник, потом сложил написанный пользователем ценник с текущей ценой. Вы можете изменить действие которое там происходит, см. выше в ответе. Ну и конечно же нам после этого нужно спрятать попап. В самом конце сама функция hidePop в которой проверка является ли кнопка скрытой или нет, если является то тогда она показывается, иначе она скрывается.


P.S.: по желанию можете в событии клика на кнопку в попапе добавить такую строку в конце функции: num.value = '', которая чистит текущее написанное число.

→ Ссылка