2013-04-12 6 views
1

계산을위한 함수 (게임 통계 계산기)를 만들었지 만 제대로 작동하지만 값을 선택 취소하면 해당 값을 빼서 값을 빼지 않습니다. 상자, 나는 코드가 조금 못생긴 보이는 알고하지만 난 JS에서 초보입니다 : 내가 (하지만 숫자이어야한다) .Also MC는 하나 개의 항목해야하지하시기 NaN의 선택을 취소하면확인란을 선택하지 않은 경우 값을 빼는 방법

function MC() { 
check=document.getElementById('check').checked; 


if(check){ 

    var hp=Number(document.form.hp.value), 
     sp=Number(document.form.sp.value), 
     ea=Number(document.form.ea.value), 
     ed=Number(document.form.ed.value), 
     pa=Number(document.form.pa.value), 
     pd=Number(document.form.pd.value); 

    var hpSum = 0,spSum=0,eaSum=0,edSum=0,pdSum=0,paSum=0; 

    eaSum = ea + 11; 
    edSum = ed + 17; 
    pdSum = pd + 17; 
    paSum = pa + 11; 


    document.form.ea.value=eaSum; 
    document.form.ed.value=edSum; 
    document.form.pa.value=paSum; 
    document.form.pd.value=pdSum; 
} 

if(check == false){ 
    eaSum = ea - 11; 
    edSum = ed - 17; 
    pdSum = pd - 17; 
    paSum = pa - 11; 

    document.form.ea.value=eaSum; 
    document.form.ed.value=edSum; 
    document.form.pa.value=paSum; 
    document.form.pd.value=pdSum; 

    } 
}; 

그것은 반환 전 이 예제에서는 필요하기 때문에 초기화가 완료되었습니다.

+0

는'VAR 검사 = ...'와'사용하십시오 다른 {...}' – Aprillion

+0

이 함께가는 HTML을 게시하시기 바랍니다 : 당신은 if 문을 버려해야합니다. – j08691

+0

장소 바깥에 변수를 사용하고자한다면'var ea, ed, pd, pa' 변수 초기화를'if() {...}'블록에 넣으시오. – Aprillion

답변

2

나는 이런 식으로 뭔가하려고 할 것입니다 : 코드에서

function MC() { 
    var check=document.getElementById('check').checked; 

    var hp=Number(document.form.hp.value), 
     sp=Number(document.form.sp.value), 
     ea=Number(document.form.ea.value), 
     ed=Number(document.form.ed.value), 
     pa=Number(document.form.pa.value), 
     pd=Number(document.form.pd.value); 

    var hpSum = 0,spSum=0,eaSum=0,edSum=0,pdSum=0,paSum=0; 

    if(check){ 
     eaSum = ea + 11; 
     edSum = ed + 17; 
     pdSum = pd + 17; 
     paSum = pa + 11; 
    } else { 
     eaSum = ea - 11; 
     edSum = ed - 17; 
     pdSum = pd - 17; 
     paSum = pa - 11; 
    } 

    document.form.ea.value=eaSum; 
    document.form.ed.value=edSum; 
    document.form.pa.value=paSum; 
    document.form.pd.value=pdSum; 
} 

일반적인 문제를 여기서

  • 지역 변수는 VAR을 놓친 체크;
  • 다른 로컬 변수는 검사 변수가 true 인 경우에만 초기화되고 이며이 값은보고 한 NaN 값으로 연결됩니다.
  • 조건을 확인해야하는 경우 에 if(condition)/else 양식을 사용하는 것이 바람직합니다.
  • 가 까다 롭고 수 : 당신이 당신의 기능에 어떤 값을 반환하지 않습니다, 당신이의 spSum 지역 변수를 선언 0으로 설정하고 사용하지 요소
  • DOM의 어떤 값을 설정합니다.
  • hpSum도 선언되었지만 사용되지 않았습니다.
+0

감사합니다. 마무리. – aleksXPO

+0

아마 더 많은 문제가 있지만, 지금은 조금 바쁘다. 죄송합니다 게시물이 무례하게 보일 경우, 그것은 의도하지 않습니다 – Eineki

+0

나는 SP와 HP에 대해 알고 있지만이 유물 엠씨는 오직 EA, PA, PD, ED를 제공합니다. 일 :) – aleksXPO

0

checktrue 인 경우에만 변수 값을 할당합니다.

function MC() { 
    // user `var`! Otherwise you're polluting the global scope 
    var checked = document.getElementById('check').checked; 

    // if it's checked then the `sign` is +, otherwise -. 
    var sign = ~-(checked << 1); 

    // don't repeat yourself, and cache `form` for a faster access. 
    // I assume from your code that `form` is the name of your form, so: 
    var form = document.forms["form"]; // reduce ambiguity 

    // Unary plus operator: 
    // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Arithmetic_Operators 
    var ea = +form.ea.value; 
    var ed = +form.ed.value; 
    var pa = +form.pa.value; 
    var pd = +form.pd.value; 
    // I removed `hp` and `sp` because not used 

    // the multiplication operator takes the precedence 
    var eaSum = ea + 11 * sign; 
    var edSum = ed + 17 * sign; 
    var pdSum = pd + 17 * sign; 
    var paSum = pa + 11 * sign; 

    // set the values back 
    form.ea.value = eaSum; 
    form.ed.value = edSum; 
    form.pa.value = paSum; 
    form.pd.value = pdSum; 
}; 
관련 문제