2016-09-19 2 views
0

우리는 코드를 편집하는 데 도움이 필요한 기존 카펫 청소 영역 계산기가 있습니다.Javascript if 및 switch 문

MOVE_FURNITURE_NO 또는 MOVE_FURNITURE_EMPTY를 선택하면 현재 계산기가 작동하며 청소할 대금은 20 % 할인됩니다. 파이버 프로텍터, 스카치 가드 또는 디콘이 점검되면 스퀘어 피트 당 $ 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"가 확인 될 때 ​​그렇게의를 업데이트하려고 AND 하나, 어떤 또는 DECON의 모든 FIBER PROTECTOR 또는 SCOTCHGARD를 검사 한 경우 20 % 할인해야합니다.

하지만 ...

"MOVE_FURNITURE_EMPTY는"체크

하나, 어떤 또는 DECON, 섬유 PROTECTOR, 또는 스카치 가드가 선택되어 모든, 그들은 전체 가격이어야한다.

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과 어떤 관련이 있습니까? 그것은 모두 자바 스크립트입니다. – 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 변수를 사용할 수 있습니다.

지금까지 코드에서 on/off 값을 나타낼 때는 부울 값 truefalse을 사용해야합니다. 그런 다음 options.OPTION_NAME == 'on' 대신 options.OPTION_NAME을 쓸 수 있습니다.

+0

감사합니다. 나는 이것을 시험해 보겠습니다. 코드/계산기는 이미 수 년전과 같이 이미 설정되었으며 지금은 필요한 코드로 수정해야합니다. 앞으로 무언가를 만들 때 내가 언급 한 제안을 분명히 지킬 것입니다. – lse