216 / 1 / 2
Регистрация: 26.02.2020
Сообщений: 258
1

Как вернуть предыдущее значение рассчитанное калькулятором

29.05.2020, 11:49. Показов 2113. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, решил создать форму для расчета по формуле (а+б)*с и не могу до конца реализовать возврат предыдущего посчитанного значения (что-то вроде кнопки "назад"), создал массив в который записываются все расчёты, но при нажатии кнопки minus первый клик не дает результата, а второй и следующие выдают значения из массива, насколько я понимаю, что при чтении номера эл-та массива, этот самый номер не успевает обновляться, а может я ошибаюсь....
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
let opGetRes = {
    
    n1: document.getElementById(`n1`),
    n2: document.getElementById(`n2`),
    n3: document.getElementById(`n3`),
    result: document.getElementById(`result`),
    sum: 0,
    mas:[],
    i: 0,
    events: {
        click1: function() {
            this.sum += (parseInt(this.n1.value) + parseInt(this.n2.value))*parseInt(this.n3.value);
            this.result.innerHTML = this.sum;
            this.mas.push(this.sum);
            this.i++;
        },
        click2: function() {
            [U]this.i--;[/U]
            this.result.innerHTML = [U]this.mas[this.i];[/U]
        }
    }
}
 
plus.addEventListener(`click`, opGetRes.events.click1.bind(opGetRes));
minus.addEventListener(`click`, opGetRes.events.click2.bind(opGetRes));
Пробовал так сделать:

click2: function() {

this.result.innerHTML = this.mas[this.i-1];
}
тоже не работает, я так понимаю, что в этом случае сначала должно было вернуться только одно предыдущее значение, т.к. поле і врятли бы обновлялось
0
29.05.2020, 11:49
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2020, 11:49
Ответы с готовыми решениями:

Вернуть предыдущее значение элемента
Есть поле ввода с подсказкой к нему: <div class="form-group"> <input id="name" name="name" class="form-control"...

Как изменить значение ключа в словаре, зная предыдущее значение?
Как изменить значение ключа в словаре, зная предыдущее значение?(тип ключа - string).

Хранить ли в таблице рассчитанное значение
У меня вопрос прям один в один с авторским :) И в форме и в отчете считает формулы всё правильно, а в таблицу в поля , где идет расчет...

3
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2474 / 1846 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
29.05.2020, 12:17 2
У вас ошибка в алгоритме: .i - 0, mas - пустой, вычисляете значение, добавляете его в mas и увеличиваете значение i. То есть i будет указывать на "конец" массива, а там пусто.

Вам не нужен i. Используйте array.pop()
The pop() method removes the last element from an array and returns that element. This method changes the length of the array.
Javascript
10
11
12
13
14
15
16
17
18
19
20
21
22
    events: {
        click1: function() {
            this.sum += (parseInt(this.n1.value) + parseInt(this.n2.value))*parseInt(this.n3.value);
            this.result.innerHTML = this.sum;
            this.mas.push(this.sum);
            // this.i++;
        },
        click2: function() {
            // this.i--;
            // this.result.innerHTML = [U]this.mas[this.i];[/U]
            this.result.innerHTML = this.mas.pop();
        }
    }
0
Эксперт JS
 Аватар для DrType
6465 / 3613 / 1074
Регистрация: 07.09.2019
Сообщений: 5,857
Записей в блоге: 1
29.05.2020, 12:34 3
j2FunOnly, но pop() меняет массив на месте, значит, нажав на кнопку Назад, мы потеряем последний элемент навсегда. Мне не нравится такое решение (либо я его не понял).

Добавлено через 7 минут
Если всё же использовать счётчик i, то можно сделать так (не проверял):
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
click1: function() {
          this.sum += (parseInt(this.n1.value) + parseInt(this.n2.value))*parseInt(this.n3.value);
          this.result.innerHTML = this.sum;
          this.mas.push(this.sum);
          this.i = this.mas.length-1;
      },
 click2: function() {
      this.i--;
      if(this.i >= 0){
       this.result.innerHTML = this.mas[this.i];
      }
   }
0
216 / 1 / 2
Регистрация: 26.02.2020
Сообщений: 258
29.05.2020, 19:39  [ТС] 4
Цитата Сообщение от j2FunOnly Посмотреть сообщение
10
    events: {
        click1: function() {
            this.sum += (parseInt(this.n1.value) + parseInt(this.n2.value))*parseInt(this.n3.value);
            this.result.innerHTML = this.sum;
            this.mas.push(this.sum);
            // this.i++;
        },
        click2: function() {
            // this.i--;
            // this.result.innerHTML = this.mas[this.i];
            this.result.innerHTML = this.mas.pop();
        }
    }
Этот код работает, но на первый клик, ничего не происходит
Цитата Сообщение от DrType Посмотреть сообщение
click1: function() {
          this.sum += (parseInt(this.n1.value) + parseInt(this.n2.value))*parseInt(this.n3.value);
          this.result.innerHTML = this.sum;
          this.mas.push(this.sum);
          this.i = this.mas.length-1;
      },
 click2: function() {
      this.i--;
      if(this.i >= 0){
       this.result.innerHTML = this.mas[this.i];
      }
   }
А этот работает, решение вроде простое)) но мозгов не хватило)))
0
29.05.2020, 19:39
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2020, 19:39
Помогаю со студенческими работами здесь

Как узнать предыдущее id-значение?
как сделать так, чтобы выводилась не id=629, а его предыдущее значение, id=632.

Как использовать предыдущее значение?
с помощью сеттера устанавливаю сумму на счету допустим 3000 public void setSumAccount(double sumAccount) { this.sumAccount =...

Как сохранять предыдущее значение в с++ ?
К примеру у меня есть формула c = a * b * c. Переменной c присвоено начальное значение 10. При помощи цикла мне нужно около n-ое кол. раз...

Как вытащить предыдущее значение поля?
Добрый день. Есть ли возможность вытащить предыдущее значение поля до сохранения документа(NotesDocument) пример : set...

Как сохранить предыдущее значение переменной
Подскажите пожалуйста, как можно сохранить предыдущее значение переменной, если я допустим хочу, чтобы каждый раз при вводе чисел в input...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
Laravel или Symfony: что лучше для старта?
Wired 18.02.2025
В веб-разработке выбор правильного фреймворка может стать определяющим фактором успеха проекта. Особенно это актуально для PHP - одного из самых распространенных языков программирования, где Laravel. . .
Что нового в Laravel 12
Wired 18.02.2025
С момента своего появления в 2011 году Laravel постоянно развивается, внедряя инновационные решения и совершенствуя существующие возможности. В начале 2025 года ожидается выход Laravel 12 - новой. . .
Роутер в Laravel: как работать с маршрутами
Wired 18.02.2025
Маршрутизация - один из основополагающих элементов любого веб-приложения на Laravel, определяющий как приложение отвечает на HTTP-запросы к различным URL-адресам. По сути, роутинг - это механизм. . .
Интеграция шаблона Bootstrap в Laravel PHP
Wired 18.02.2025
Разработка веб-приложений в современном мире требует не только надежного бэкенда, но и привлекательного, отзывчивого интерфейса. Laravel, как один из самых популярных PHP-фреймворков, отлично. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru