Калькулятор расчета доставки
Привет, ребята=) Возникло затруднение при написании скрипта калькулятора для расчета доставки.
Так: 0.5 кг = 2200 руб. и так на увеличение по +200 при увеличении инпута на 0.1, но не более 1кг; и -200 при уменьшении, но не менее 0.5кг. 1 кг = 3200 руб. Не пойму как мне рассчитать это:D вот мой "код": <select name="method" class="find" onchange="question()"> <option value="ems">ЕМS</option> <option value="avia">Авиа</option> <option value="sal">SAL</option> <option value="parohod">Пароход</option> </select> <input type="number" value="0.5" min="0.5" step="0.1" max="1" name="weight" id="weight" size="4"> <hr><span id="answer"></span> руб var price = document.getElementById('answer'), ems_price = '2,200'; avia_price = '2,500'; sal_price = '2,700'; parohod_price = '1,800'; price.innerHTML = ems_price; function question() { var method = $('.find').val(); switch(method){ case 'ems': var weight = $('#weight').val(); $('#weight').on('change', function() { // тут не важно, что событие здесь. Это я править буду потом=) alert(ems_price); if(weight > 0.5 && weight < 1){ // тут что-то другое, вероятнее всего. Я же делаю проверку "не ниже и не выше"=) price.innerHTML = ? - не могу рассчитать } }); break; //Далее тоже расчет по формулам будет=)) case 'avia': price.innerHTML = avia_price; break; case 'sal': price.innerHTML = sal_price; break; case 'parohod': price.innerHTML = parohod_price; break; } } P.S.: для avia, sal и parohod не нужно ничего. я по примеру ems сделаю=) |
qumo,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { var price = document.getElementById('answer'), ems_price = 2200; price.innerHTML = ems_price; function question() { var method = $('.find').val(); switch(method) { case 'ems': var weight = +$('#weight').val(); var sum = ems_price; if(weight > 0.5 && weight <= 1){ for (var i= 5 ; i< weight*10; i++) { sum += 200 }; }; price.innerHTML = sum; break; //Далее тоже расчет по формулам будет=)) case 'avia': price.innerHTML = avia_price; break; case 'sal': price.innerHTML = sal_price; break; case 'parohod': price.innerHTML = parohod_price; break; } } $('#weight').on("input", question); $('.find').on("change", question); }); </script> </head> <body> <select name="method" class="find" > <option value="ems">ЕМS</option> <option value="avia">Авиа</option> <option value="sal">SAL</option> <option value="parohod">Пароход</option> </select> <input type="number" value="0.5" min="0.5" step="0.1" max="1" name="weight" id="weight" size="4" > <hr><span id="answer"></span> руб </body> </html> |
Спасибо, Рони, огромное!=) смотрю, я практически и не наг#вн#кодил=))
|
Проблема небольшая=) пропускает значение 2800=)
|
Цитата:
|
Спасибо за ответ=) Теперь он 3200 не делает на 1кг, а когда в обратную делаешь, то 0.5 = 2400, а не 2200=)
|
qumo,
пропишите нужные условия |
Вот же спасибо огромнейшее=) Спасибо, Рони, что ты есть!=)
|
Цитата:
|
Цитата:
|
спасибо, а не мог бы ты мне объяснить эту часть? Почем тут именно так?
for (var i= 5 ; i< weight*10; i++) { sum += 200 // тут увеличиваем на 200 переменную sum }; |
qumo,
потому что в js .2 + .1 !== .3 отсюда все ошибки моего первоначального варианта alert(.2+.1); зато 1 + 2 == 3 alert(2+1); |
спасибо, прикольно=)) но я не понял: почему $i поставил именно со значением 5?=) почему умножение веса идет именно на 10?=)
|
Цитата:
|
все равно не понимаю, почему var i = 5 и вес * на 10. Понятно, что вес будет целым числом и i тоже, но как js правильно "понимает", что нужно передать именно 200 при увеличении и -200 при уменьшении(переменная sum это понятно, тут другой сути вопрос)=) а что если бы была не от 0.5, а от 1.25(или еще как-то) до, например, 2. Как этот цикл смог на это повлиять=)
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
qumo,
нужно 6 шагов -- какая разница будет это 0.5 0.6 ... 1 или 5 ... 6 .... 10 ... всё пас обьяснять |
Цитата:
|
Цитата:
|
А почему при следующем if sum вновь сбрасывается на 2200?
case 'ems': var weight = +$('#weight').val(); var sum = ems_price; if(weight > 0.4 && weight <= 1){ for (var i= 50; i< weight*100; i++) { sum += 20; }; price.innerHTML = sum; }; if(weight => 1 && weight <= 2){ for (var i = 100; i< weight * 100; i++) { sum += 18; }; price.innerHTML = sum; }; break; |
weight => 1почему вас синтаксический анализатор подальше не послал? :) |
Цитата:
|
Цитата:
|
Цитата:
|
Немного отредактировал
$(function() { var price = document.getElementById('answer'), ems_price = 2200; avia_price = 2500; sal_price = 2700; parohod_price = 1800; price.innerHTML = ems_price; function question() { var method = $('.find').val(); switch(method) { case 'ems': var weight = +$('#weight').val(); var sum = ems_price; if(weight >= 0.5 && weight <= 1){ for (var i= 50; i< weight*100; i++) { sum += 20; }; price.innerHTML = sum; }; if(weight >= 1.25 && weight <= 2){ for (var i = 125; i< weight * 100; i++) { sum += 24; }; price.innerHTML = sum; }; break; case 'avia': price.innerHTML = avia_price; break; case 'sal': price.innerHTML = sal_price; break; case 'parohod': price.innerHTML = parohod_price; break; } } $('#weight').on("change", question); $('.find').on("change", question); }); |
qumo,
если есть вопросы, то пост 25 |
сейчас мне нужно от 1.25 до 2 по 0.01 увеличивать предыдущий sum на 24=) но предыдущий sum, при достижении 1.25 вновь сбрасывается до 2200=(
|
qumo,
а куда делось от 1 до 1.25 и каким образом изменился шаг с 0.1 до 0.01 -- эти чудеса как-то разъяснить треба?! |
Цитата:
|
Цитата:
|
$(function() { var price = document.getElementById('answer'), ems_price = 2200; avia_price = 2500; sal_price = 2700; parohod_price = 1800; price.innerHTML = ems_price; function question() { var method = $('.find').val(); switch(method) { case 'ems': var weight = +$('#weight').val(); var sum = ems_price; if(weight >= 0.5 && weight <= 1){ // было weight => 0.5 for (var i= 50; i< weight*100; i++) { //было var i = 5 и weight * 10 sum += 20; // было sum += 200 }; price.innerHTML = sum; }; if(weight >= 1.25 && weight <= 2){ //Добавил for (var i = 125; i< weight * 100; i++) { sum += 24; }; price.innerHTML = sum; }; //Конец добавленного break; case 'avia': price.innerHTML = avia_price; break; case 'sal': price.innerHTML = sal_price; break; case 'parohod': price.innerHTML = parohod_price; break; } } $('#weight').on("change", question); $('.find').on("change", question); }); |
qumo,
вопрос тот же где пропавший диапазон и строку 19 выкинуть , а строку 25 перенести в конец 26. |
Цитата:
|
ой, видимо, вы про него и говорили - "пропавший диапазон", да?=)))
|
qumo,
$(function() { var res = document.getElementById("answer"), price = { "ems": 2200, "avia": 2500, "sal": 2700, "parohod": 1800 }; res.innerHTML = price["ems"]; function question() { var method = $(".find").val(); var weight = +$("#weight").val(); var sum = price[method]; switch (method) { case "ems": if (weight >= .5 && weight <= 1) for (var i = 50; i < weight * 100; i++) sum += 20; else if (weight > 1 && weight < 1.25){ /* где? */ } else if (weight >= 1.25 && weight <= 2) for (var i = 125; i < weight * 100; i++) sum += 24; break; case "avia": break; case "sal": break; case "parohod": break } res.innerHTML = sum } $("#weight").on("change", question); $(".find").on("change", question) }); |
значит я правильно понял вас:)
|
берет после 1.01 с 2200, а не с 3200=((
$(function() { var res = document.getElementById("answer"), price = { "ems": 2200, "avia": 2500, "sal": 2700, "parohod": 1800 }; res.innerHTML = price["ems"]; function question() { var method = $(".find").val(); var weight = +$("#weight").val(); var sum = price[method]; switch(method) { case 'ems': if (weight >= .5 && weight <= 1){ for (var i = 50; i < weight * 100; i++) {sum += 20;} } else if (weight > 1 && weight <= 2){ for (var i = 100; i < weight * 100; i++) {sum += 18;} } break; case 'avia': price.innerHTML = avia_price; break; case 'sal': price.innerHTML = sal_price; break; case 'parohod': price.innerHTML = parohod_price; break; } res.innerHTML = sum } $('#weight').on("change", question); $(".find").on("change", question); }); |
Часовой пояс GMT +3, время: 16:59. |