2016-09-19 134 views
0

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

如果选中MOVE_FURNITURE_NO或MOVE_FURNITURE_EMPTY,计算器当前会运行,则要清理的价格将折扣20%。如果检查光纤保护器,scotchgard或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 

现在,我们正在尝试当“MOVE_FURNITURE_NO”检查更新那么,一个,任何或所有DECON的, FOBER PROTECTOR或SCOTCHGARD已经过检查,他们应该享受20%的折扣。

但是......

当“MOVE_FURNITURE_EMPTY”被选中,一个,任何或所有DECON,光纤保护器或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; 

我知道这是很多要问,但先进的帮助感谢你。

+0

这与SQL有什么关系?这都是Javascript。 – Barmar

回答

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); 

您可以使用在case语句相同discount变量,以及当你显示逐项分解。

顺便说一句,当你代表开/关值的代码,你应该使用布尔值truefalse。然后你可以简单地写options.OPTION_NAME而不是options.OPTION_NAME == 'on'

+0

谢谢,我会试试这个。代码/计算器已经像几年前一样建立起来了,现在我必须将代码修改为我们现在需要的代码。在将来我创造一些东西时,我一定会记住你提到的建议。 – lse