繁体   English   中英

如果未选中复选框,如何减去一个值

[英]how to subtract a value if the checkbox in un-checked

我做了一个用于计算的功能(游戏统计计算器),它工作正常,但是当我取消选中该值时,它不会减去选中框所添加的值,我知道代码看起来有些丑陋,但是我是一个初学者在JS中:

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;

    }
};

当我取消选中NaN时它会返回(但它应该是一个数字)。另外,请不要因为我只是在那儿进行初始化而将MC当作一项,因为在此示例中我需要它。

我会尝试这样的事情:

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

您的代码中的一般问题:

  • 检查局部变量错过了变量;
  • 仅当check变量为true时,才会初始化其他局部var,这将导致您报告的NaN值;
  • 如果您必须检查一个条件及其相反的条件,则最好在if(condition)/if(!condition)上使用if(condition)/if(!condition) if(condition)/else形式;
  • 保持警惕:您不会在函数中返回任何值,只需设置dom元素的一些值
  • 您声明spSum局部变量,将其设置为0而不使用它。
  • hpSum也已声明但未使用。

因为仅当checktrue才分配变量的值。 您必须将它们放出if语句:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM