2016-11-09 2 views
1

텍스트 필드가 아닌 라디오 버튼과 체크 박스만으로 구성된 양식에서 값을 취하는 자바 스크립트 가격 계산기를 만들려고합니다.특정 조건이 자바 스크립트에서 건너 뛰었습니다.

service = 0; 

var setPoint = function (elem) { 
    var $e = $(elem); 
    var points = $e.attr("data-points"); 
    switch ($e.attr("name")) { 
     case 'group1': 
      group1 = parseFloat(points); 
     case 'group2': 
      group2 = parseFloat(points); 
     case 'group4': 
      group4 = parseFloat(points); 
     case 'group5': 
      group5 = parseFloat(points); 
     case 'services': 
      if ($(elem).attr('checked1') == 'true') { 
       $(elem).attr("checked1", "false"); 
       service = parseFloat(service) - parseFloat(points); 
      } else { 
       $(elem).attr("checked1", "true"); 
       service = parseFloat(service) + parseFloat(points); 
      } 
    } 
} 

var calculatePoints = function() {  
    var total;  
    var values = [group1, group2, group4, group5, service]; 

    values.map(function (value) { 
     if (value == "" || value == undefined || value == NaN) { 
      value = 0; 
      return value; 
     } 
    }); 

    if (service == 0) { 
     window.alert("At least one service needs to be selected!"); 
     console.log("Service = 0"); 
    } else if (service <= 20) { 
     total = group1 + group2 + group4 + group5 + service; 
    } else if (service > 20 && service <= 40) { 
     total = group1 + group2 + group4 + group5 + (service * 0.8); 
    } else total = group1 + group2 + group4 + group5 + (service * 0.7); 

    console.log(total * 1000); 

    return false; 
} 

어쨌든, 조건문 if (service==0)는 전혀 작동하지 않습니다 : 여기 내 자바 스크립트입니다!

양식 필드를 클릭 할 때마다 내 HTML에서 onclick 메서드를 사용하여 setPoints 함수를 호출하고 onsubmit을 사용하여 calculatePoints 함수를 호출합니다. onsubmit을 사용할 때 페이지가 새로 고쳐지지 않도록했습니다.

내 코드에 어떤 문제가 있는지, 왜 그런 일이 발생하는지 알지 못해서 솔루션과 함께 설명하면 도움이 될 것입니다. 여기에 전체 코드가 포함 된 코드 en을 찾을 수 있습니다. http://codepen.io/anshap1719/pen/pNjepV

+0

당신은 실제로 당신을 도울 수있는 충분한 정보를 제공하지 못했습니다. 그러나'setPoint() '를 먼저 호출하고'services' 요소를 전달하면'service'는'0'이되지 않습니다. 당신 자신을 디버그하고 논리 흐름의 각 단계에서'service'의 값을 확인해야합니다. –

+0

@RoryMcCrossan 죄송합니다. 방금 내가 어떻게 함수를 호출하는지 설명하도록 수정했습니다. –

+0

@RoryMcCrossan 그 가치가 0이 아니라는 것을 안다.하지만 나는 왜 이해할 수 없다. –

답변

2

break case로 각 사례를 스위치 케이스에 넣으십시오. 라디오 버튼 중 하나를 chosed되지 않은 경우

switch ($e.attr("name")) { 
    case 'group1': 
     group1 = parseFloat(points); 
     break; 
    case 'group2': 
     group2 = parseFloat(points); 
     break; 
    case 'group4': 
     group4 = parseFloat(points); 
     break; 
    case 'group5': 
     group5 = parseFloat(points); 
     break; 
    case 'services': 
     if ($(elem).attr('checked1') == 'true') { 
      $(elem).attr("checked1", "false"); 
      service = parseFloat(service) - parseFloat(points); 
     } else { 
      $(elem).attr("checked1", "true"); 
      service = parseFloat(service) + parseFloat(points); 
     } 
     break; 
} 
+0

Worked !! 설명해주세요 ... –

+0

휴식을 취하지 않고도 스위치 케이스가 작동하지 않으면 마지막 케이스로 건너 뛰거나 전혀 작동하지 않습니다. 이런 식으로 설계된 것입니다 @AnshulSanghi – Sycraw

+0

Ok. 도와 주셔서 감사합니다. –

0

당신은 단지뿐만 아니라 당신이 service했던대로 변수 group1 ... group5제로으로 초기화 할 필요가 있으므로,이 같은 것으로, 오류 콘솔 얻을 수 없습니다 따르

service = group1 = group2 = group3 = group4 = group5 = 0; 
+0

사실, 서비스가 아닌 다른 필드의 유효성을 검사하고 싶지 않습니다. 서비스 필드 만 필요하므로 그 일을하지 않았습니다. 또한, 모든 변수를 초기화하면 그 값은 함수 내에서만 변경되고 setPoints 함수 밖에서도 값은 여전히 ​​0입니다. –

+0

이렇게 'group1 is not defined'와 같은 콘솔 오류가 발생하고 누락 된'break '@Sycraw '가 언급 된대로 각각의 경우 후에. –

+0

그럴 수 없습니다. 내가 값을 초기화하면 값이 변경되지 않습니다. 그 해결 방법에 대해 알고 있습니까? –

0

그것은 오류에 대한

if ($(elem).attr('checked1') === 'true') { 
    // Code here, use triple === for conditional equality check 
} 
+0

감사하지만이 문제가 해결되지 않았습니다! –

+0

나는 이전의 대답이 해결 된 것으로 보이는 별도의 문제가 있다고 생각합니다. js의 조건부 체크는 === 그래야합니다. 좋은 하루 되세요! – Liam

+0

방금 ​​변경되었습니다. 감사! –

0

확인 콘솔해야한다, 내가로 그룹 1이 정의되지 않았다고 말합니다. 스위치에서 사용한 변수를 정의하지 않았습니다.

var service = 0, group1=0.0, group2=0.0, group4=0.0, group5=0.0; 

이렇게하면 필요한 출력이 제공됩니다.

+0

모든 변수를 초기화하면 함수 내에서만 값이 변경되고 setPoints 함수 외부에서는 해당 값이 0입니다. 그럴 필요가 없습니다.그 해결 방법을 알고 있습니까? –

관련 문제