Javascript if和switch语句

时间:2016-09-19 16:05:13

标签: javascript

我们有一个现有的地毯清洁区域计算器,我需要协助编辑代码。

如果选中MOVE_FURNITURE_NO或MOVE_FURNITURE_EMPTY,则计算器当前正在运行,要清洁的价格打折20%。如果检查光纤保护器,苏格兰威士忌或者decon,他们每平方英尺的价格是25美元。

以下是我遇到问题的表单上的复选框:

<input type="checkbox" id="FIBER_PROTECTOR" /> Fiber ProTector  
<input type="checkbox" id="SCOTCHGARD" /> Scotchgard  
<input type="checkbox" id="DECON" /> Decontaminate & Deodorize  
<input type="checkbox" id="MOVE_FURNITURE_EMPTY" /> No, The Room Is Empty  
<input type="checkbox" id="MOVE_FURNITURE_NO" /> No, Clean Around It  

现在我们正在尝试更新for,以便&#34; MOVE_FURNITURE_NO&#34;检查并选中DECON,FIBER PROTECTOR或SCOTCHGARD中的一个,任何一个或全部,它们应该是20%的折扣。

但是...

当&#34; MOVE_FURNITURE_EMPTY&#34;检查,选中DECON,FIBER PROTECTOR或SCOTCHGARD中的一个,任何一个或全部,它们应该是全价。

这些是我目前的Javascript计算:

if (options.FIBER_PROTECTOR == 'on') total += Math.max(sq * FIBER_PROTECTOR, OTHER_SERVICES_MIN);  
if (options.SCOTCHGARD == 'on') total += Math.max(sq * SCOTCHGARD, OTHER_SERVICES_MIN);  
if (options.DECON == 'on') total += Math.max(sq * DECON, OTHER_SERVICES_MIN);  

我尝试了这段代码,但计算是将所有三个加在一起,而不是有条件地添加:

if (options.MOVE_FURNITURE_NO == 'on' || options.FIBER_PROTECTOR == 'on') total += Math.max(sq * .032 / FIBER_PROTECTOR, OTHER_SERVICES_MIN);  
if (options.MOVE_FURNITURE_NO == 'on' || options.SCOTCHGARD == 'on') total += Math.max(sq * .032 / SCOTCHGARD, OTHER_SERVICES_MIN);  
if (options.MOVE_FURNITURE_NO == 'on' || options.DECON == 'on') total += Math.max(sq * .032 / DECON, OTHER_SERVICES_MIN);  

在网站的价格细分部分也应该计算相同的价格,这是我们当前使用的代码:

      if (item_val == 'on') {
        switch (optname) {
          case 'FIBER_PROTECTOR': 
            ul += '<span class="price_breakdown">$' + Math.max(sq_ft * FIBER_PROTECTOR, OTHER_SERVICES_MIN).toFixed(2) + '</span>';
            break;
          case 'SCOTCHGARD': 
            ul += '<span class="price_breakdown">$' + Math.max(sq_ft * SCOTCHGARD, OTHER_SERVICES_MIN).toFixed(2) + '</span>';
            break;
          case 'DECON': 
            ul += '<span class="price_breakdown">$' + Math.max(sq_ft * DECON, OTHER_SERVICES_MIN).toFixed(2) + '</span>';
            break;

我知道这有很多要问,但谢谢你提前帮忙。

1 个答案:

答案 0 :(得分:0)

您说明在选中MOVE_FURNITURE_NO 时需要应用折扣并选中其他选项。但您的代码使用而不是。您应该在其他选项之间使用||来查看是否设置了其中任何一个,然后使用&& MOVE_FURNITURE_NO

在下面的代码中,我没有在大if中进行价格计算,我只设置了一个discount变量。然后我在将每个选项的价格添加到总数时使用它。

if (options.MOVE_FURNITURE_NO == 'on' && options.MOVE_FURNITURE_EMPTY != 'on' &&
        (options.FIBER_PROTECTOR == 'on' ||
         options.SCOTCHGARD == 'on' ||
         options.DECON == 'on')) {
    discount = 0.32; // reduced price
} else {
    discount = 1; // full price
}
if (options.FIBER_PROTECTOR == 'on') total += Math.max(discount * sq * FIBER_PROTECTOR, OTHER_SERVICES_MIN);  
if (options.SCOTCHGARD == 'on') total += Math.max(discount * sq * SCOTCHGARD, OTHER_SERVICES_MIN);  
if (options.DECON == 'on') total += Math.max(discount * sq * DECON, OTHER_SERVICES_MIN);  

当您显示明细细分时,您也可以在discount语句中使用相同的case变量。

顺便说一句,当你在代码中表示开/关值时,你应该使用布尔值truefalse。然后,您只需撰写options.OPTION_NAME而不是options.OPTION_NAME == 'on'