2016-09-19 132 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