2017-01-05 3 views
1

У меня есть два входа, где пользовательские типы width и height продукта (скажем, в мм). Таким образом, минимальная цена составляет 250 долларов США до width=50 и height=20. Затем я хочу увеличить общую цену на 25 долларов каждый раз, когда ширина или высота отредактированы на 10 мм. Так что сумма должна составлять 275 долларов США, если w=60 and h=20 (или w=50/h=30); $ 300 - при w=60 and h=30 ...Расчетная цена на основе parseInt

Теперь с моим плохим знанием Jquery я сделал это чудовище https://jsfiddle.net/fkqotzzb/

var basePrice = 250; 
 
var priceForSm = 50; 
 
var price300 = basePrice + priceForSm; 
 
var price450 = price300 + (priceForSm * 3); 
 
var price700 = price450 + (priceForSm * 5); 
 
var price950 = price700 + (priceForSm * 5); 
 

 
$("#stwidth, #stheight").keyup(function() { 
 

 
\t var stwidth = parseInt($("#stwidth").val(), 10); 
 
\t var stheight = parseInt($("#stheight").val(), 10); 
 

 
\t if (stwidth > 113) { 
 
\t \t $("#stwidth").val("113"); 
 
\t } 
 
    
 
    if (stheight > 62) { 
 
\t \t $("#stheight").val("62"); 
 
\t } 
 

 
\t if (stwidth >= 50 && stheight >= 20 || stwidth >= 110 && stheight >= 10) { 
 
\t \t $(".stamp-full-price span").html(basePrice); 
 

 
\t } 
 

 
\t if (stwidth >= 30 && stheight >= 60 || stwidth == 80 && stheight == 20 || stwidth >= 60 && stheight >= 30 || stwidth >= 40 && stheight >= 40) { 
 
\t \t $(".stamp-full-price span").html(price300); 
 
\t } 
 

 
\t if (stwidth >= 110 && stheight >= 20 || stwidth >= 110 && stheight == 30 || stwidth >= 70 && stheight >= 30 || stwidth >= 60 && stheight >= 40 || stwidth >= 50 && stheight >= 50 || stwidth >= 40 && stheight >= 60) { 
 
\t \t $(".stamp-full-price span").html(price450); 
 
\t } 
 

 
\t if (stwidth >= 110 && stheight >= 40 || stwidth >= 110 && stheight >= 50 || stwidth >= 90 && stheight >= 40 || stwidth >= 80 && stheight >= 50 || stwidth >= 60 && stheight >= 60) { 
 
\t \t $(".stamp-full-price span").html(price700); 
 
\t } 
 

 
\t if (stwidth >= 100 && stheight >= 60 || stwidth >= 111 && stheight >= 50) { 
 
\t \t $(".stamp-full-price span").html(price950); 
 
\t } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" name="stwidth" id="stwidth" value="50" class="form-control input-xs" maxlength="3"> x <input type="text" name="stheight" id="stheight" value="20" class="form-control input-xs" maxlength="2"> мм 
 

 
<div class="stamp-full-price"> 
 
    Total: <span>250</span> 
 
</div>

Здесь цены и размеры установлены вручную, но я не хочу, чтобы установить их так, было бы неплохо контролировать цену на width и height отдельно. Он также не охватывает все размеры корпусов, поэтому я не могу предсказать, какая цена может быть показана в конкретной ситуации, и это действительно монстр :).

У меня также есть еще несколько вариантов после размеров в виде радиостанций и флажков. Итак, как получить стоимость общей цены после размеров, определенных для добавления цены на радио/флажок?

+3

вставить код в вопросе (не только ссылка на скрипке) – happymacarts

+0

лучший сценарий выяснить какая-то формула, которую вам нужно рассчитать цену, основанную на размерах. затем добавьте это к функции в обработчике событий – happymacarts

+0

@LukasLiesis, я слишком быстро читаю :(Я иду спать! Я удалю свой комментарий Orig, чтобы очистить нить – happymacarts

ответ

0

в то время как вы уже нашли способ, чтобы получить ширину/высоту и хочет, чтобы увеличить цену на $ 25 за каждый дополнительный 10, просто сделать математику:

var stwidth = parseInt($("#stwidth").val(), 10); 
var stheight = parseInt($("#stheight").val(), 10); 

var price = 250; 

if(stwidth > 50) { 
    price += 25 * Math.ceil((stwidth - 50)/10) 
} 

if(stheight > 20) { 
    price += 25 * Math.ceil((stheight - 20)/10) 
} 

$(".stamp-full-price span").html(price); 

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

+0

Просто то, что мне нужно. добавив еще одну сумму $ в расчетную цену, если установлен флажок? –

+0

Итак, просто добавьте еще один if if if (checked) {price + = X} 'или если вы хотите увеличивать не на $ 25, а некоторое другое значение при проверке , затем сделайте 25 как переменную и измените ее значение, прежде чем делать математику –

0

Вот еще одно решение, где цена рассчитывается на округлых значений

var basePrice = 250; 
 
var baseW = 50; 
 
var baseH = 20; 
 

 
$("#stwidth, #stheight").keyup(function() { 
 
\t var stwidth = parseInt($("#stwidth").val(), 10); 
 
\t var stheight = parseInt($("#stheight").val(), 10); 
 

 
\t var dW = (stwidth - baseW) > 0 ? Math.round((stwidth - baseW)/10) : 0; 
 
\t var dH = (stheight - baseH) > 0 ? Math.round((stheight - baseH)/10) : 0; 
 
     var price = basePrice + dW*25 +dH*25; 
 
     $(".stamp-full-price span").html(price); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" name="stwidth" id="stwidth" value="50" class="form-control input-xs" maxlength="3"> x 
 
<input type="text" name="stheight" id="stheight" value="20" class="form-control input-xs" maxlength="2"> мм 
 

 
<div class="stamp-full-price"> 
 
    Total: <span>250</span> 
 
</div>

+0

, это неправильно, потому что вы используете круглую функцию, которая в некоторых сценариях округляется, проверьте мой ответ на правильную математику. Ваша математическая цена будет такой же для width = 51 как это было бы 50, в то время как он должен был уже увеличиться на 25 долларов. –

+0

Спасибо за ваш ответ! –

+0

@LukasLiesis, конечно. Math.ceil подходит гораздо лучше, чем раунд. используйте Math. Он рассчитан почти правильно. – Banzay

Смежные вопросы