Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.06.2019, 11:46
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

Расчет числа исходя из положения ползунка
Доброго времени суток, делаю простую программу по расчету числа, исходя из значения value ползунка.

Возникла проблема, число считается не верно, и когда ползунок стоит в начальном положении (value = 0), итоговая сумма !=0, более того, если ползунок двигать несколько раз, итоговая сумма постоянно разная.

Однозначно я начудил в коде, но не могу пофиксить, подскажите что нужно сделать, чтобы расчет был верным.

Спасибо.

<div class="inps">
    <label for="power">
      <p>Мощность</p>
        <input type="text" id="power" class="inp power" oninput="changeInp()">
    </label>
    <label for="cost">
        <p>Стоимость</p>
        <input type="text" id="cost" class="inp cost" oninput="changeRange(), changeInp()">
    </label>
  </div>

  <input id='range' class='range' type="range" min="0" max="9999" step="100" value="0" oninput="changeRange()">


function changeRange() {
  var range = document.getElementById('range');
  var power = document.getElementById('power');
  var cost = document.getElementById('cost');
  var sum = 0;

  sum = power.value * 3.30;
  

  power.value = range.value;
  cost.value = (sum).toFixed(2);
}

function changeInp() {
  var range = document.getElementById('range');
  var power = document.getElementById('power');
  var cost = document.getElementById('cost');
  var sum = 0;

  sum = power.value * 3.30;
  range.value = power.value;
  cost.value = (sum).toFixed(2);

}
Ответить с цитированием
  #2 (permalink)  
Старый 17.06.2019, 11:59
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

Решил проблему, был изначально неверный алгоритм действий, нужно было вычислять не от значения power а от значения range

То есть заменить (sum = power.value * 3.30) на (sum = range.value * 3.30)
Ответить с цитированием
  #3 (permalink)  
Старый 17.06.2019, 12:14
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

Возникает еще вопрос, как эту программу написать более корректно (грамотно)?, чтобы не стыдно было показать.
Ответить с цитированием
  #4 (permalink)  
Старый 17.06.2019, 12:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

TheSanches,
зачем две одинаковые функции?
Ответить с цитированием
  #5 (permalink)  
Старый 17.06.2019, 13:12
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

Первая функция вычисляет и выводит число которое берет с value ползунка
Вторая делает тоже, но берет число с value инпута

Дело в том что при вводе числа в инпут, ползунок тоже меняет свое положение на заданное и инпуте количество шагов (step= число заданное в инпуте).

Вероятно все эти действия можно прописать в одной функции?
Ответить с цитированием
  #6 (permalink)  
Старый 17.06.2019, 14:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от TheSanches
Вероятно все эти действия можно прописать в одной функции?
вероятно можно, если знать что вам нужно.
Ответить с цитированием
  #7 (permalink)  
Старый 17.06.2019, 16:53
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Как-то так?
<div class="inps">
    <label for="power"><p>Мощность</p></label>
    <input type="number" id="power" class="inp power" min="0" max="10000" step="100" value="0">
    <input id='range' class='range' type="range" min="0" max="10000" step="100" value="0" >

    <label for="cost"><p>Стоимость</p></label>
    <input type="text" id="cost" class="inp cost" >
</div>

<script>
var range = document.getElementById('range'),
     power = document.getElementById('power'),
     cost = document.getElementById('cost'),
     sum = 0;
     
document.querySelector("div.inps").addEventListener("input", function(e) {
   console.log(e.target.id);
   if (e.target.id == "range") power.value = range.value;
   if (e.target.id == "power") range.value = power.value;
   
   sum = power.value * 3.30;
    cost.value = (sum).toFixed(2);
});
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 22.06.2019, 10:17
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

Спасибо, как раз то что искал
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плавное изменение положения ползунка Novichek_pro Элементы интерфейса 8 07.12.2016 13:52
Изменение скорости анимации в зависимости от положения ползунка range Alex_D181 jQuery 2 03.08.2015 20:06
Расчет положения элемента Moloch Events/DOM/Window 6 30.10.2013 21:45
Расчет числа последовательностей Slavenin Оффтопик 10 20.03.2012 13:58
Добавление исходного числа в расчет (форма заказа) seoguru Общие вопросы Javascript 2 27.02.2012 12:47