【问题标题】:If-Else Issue In JavascriptJavascript中的If-Else问题
【发布时间】:2014-03-13 03:08:43
【问题描述】:

我在 javascript 中做一个条件语句。当用户在“Collect”输入框输入一个值时,该值与“CurBal”输入框的值进行加法运算,将答案放入名为“Balance”的输入框。

如果用户在“Deposit”输入框中输入一个值,它的值将从“CurBal”中减去,差值也将反映(假设)在“Balance”中

我有这个代码:

var collect = parseFloat(document.getElementById("Collect").value) ||0;
var dep     = parseFloat(document.getElementById("Deposit").value) ||0;
var curr    = parseFloat(document.getElementById("CurBal").value) ||0;
var bal     = document.getElementById("Balance");

if (collect.value = true)
{
 bal.value = (collect + curr).toFixed(2)
 bal       = document.getElementById("Balance");
}

else if (dep.value = true)
{
 bal.value = (curr - dep).toFixed(2)
 bal       = document.getElementById("Balance");
} 

HTML:

<tr>
 <td> &nbsp;Collections: </td>
 <td> &nbsp; <input onchange="addNumbers()" type="text" id="Collect" name="Collect" value="" /> </td>
</tr>

<tr>
 <td> &nbsp;Deposits:</td>
 <td> &nbsp;<input onchange="addNumbers()" type="text" id="Deposit" name="Deposit" value="" /> </td>
</tr>

<tr>
 <td> &nbsp;Current Balance: </td>
 <td> &nbsp;<input onchange="addNumbers()" type="text" id="CurBal" name= "CurBal" value="<?php echo $all['balance']; ?>" readonly="readOnly" /> </td>
</tr>

<tr>
 <td> &nbsp;Balance: </td>
 <td> &nbsp;<input type="text" id="Balance" name="Balance" value="" readonly="readOnly" /> </td>
</tr>

但是,它只是正确地执行了第一个条件。如果我在“存款”输入框中输入了一个值,它不会从“CurBal”中减去该值,它只是从“CurBal”中复制该值。

应该删除、添加或更改哪些内容?谢谢你的帮助

附加信息:用户只能在“收集”或“余额”中输入值。

【问题讨论】:

  • = 用于赋值,===== 用于比较。
  • 如果我输入“if (collect.value == true)”,输入框“余额”中没有“答案”
  • 这可能是因为collectdep 中都有一个值,而这些值不等于true,所以两个if 条件都不满足。尝试将if 条件更改为:if (collect.value != 0)
  • 你想检查什么条件?
  • 另外,curr 呢?您正在检查 collect 文本框是否有值,但您不验证 curr 文本框是否有值。

标签: javascript if-statement addition subtraction


【解决方案1】:

你有这个:

if (collect.value = true)
{
 bal.value = (collect + curr).toFixed(2)
 bal       = document.getElementById("Balance");
}

else if (dep.value == true)
{
 bal.value = (curr - dep).toFixed(2)
 bal       = document.getElementById("Balance");
} 

听起来好像你需要这个:

if (collect.value = true)
{
 bal.value = (collect + curr).toFixed(2)
 bal       = document.getElementById("Balance");
}

if (dep.value == true)
{
 bal.value = (curr - dep).toFixed(2)
 bal       = document.getElementById("Balance");
}

你有一个else if 条件,所以如果collect.value 为真,你的其他条件将不会运行。

注意 - 您还在 if 语句中执行赋值,而事实上,您应该检查是否相等。事实上,您甚至不需要这样做;你可以这样做:

if (collect.value)
{
...
}

if (dep.value)
{
...
} 

【讨论】:

  • 如果我输入“if (collect.value)”或“if (collect.value = true)”,我在“余额”输入框中没有得到任何“答案”。这就是我输入“if (collect.value = true)”的原因,因为这样,我得到了一个“答案”。它令人困惑。
【解决方案2】:

您在第一个if 测试中将true 分配给collect.value。赋值表达式的值就是赋值的值;在这种情况下true。因此,第一次测试总是会成功。您应该使用===== 进行比较测试。 (如果需要,第一个运算符将转换类型;=== 运算符只有在当前数据类型已经相同时才会成功。

对于布尔值,最好使用if (collect.value)(等)而不是if (collect.value == true)

【讨论】:

    【解决方案3】:

    您在 if 条件下缺少双等号。 尝试改变条件。

    if (collect.value != 0)
    
    else if (dep.value != 0)
    

    【讨论】:

    • 如果我输入 ==,我没有得到任何结果。另外,当我尝试您的解决方案时,第一个条件是正确执行(添加)。但是减法是不对的。它只是从路边复制了值。 >.
    【解决方案4】:

    根据以下评论编辑

    // Collect is now a number
    var collect = parseFloat(document.getElementById("Collect").value) ||0;
    
    // dep is now a number
    var dep     = parseFloat(document.getElementById("Deposit").value) ||0;
    
    // Cur is now a number
    var curr    = parseFloat(document.getElementById("CurBal").value) ||0;
    
    // bal is now pointing to an element
    var bal     = document.getElementById("Balance");
    
    
    // What are you trying to compare here? That bal !== 0 perhaps?
    // Collect is a number, so we can do the compare here.
    if (collect !== 0)  {
     bal.value = (collect + curr).toFixed(2)
    
    
     // Dep, on the other hand, is pointing to an element
     // so we use the property here
     // The leading '+' is a quick way to turn the string value (dep.value is a string)
     // into a number.
    } else if (+dep.value !== 0) {
     bal.value = (curr - dep).toFixed(2)
    }
    

    ** 备注 ** 行:

    if (collect !== 0)  {
    

    可以写成更短的

    if (collect)  {
    

    但我始终建议编写最易读的版本,准确描述您的意思。

    【讨论】:

    • 我正在尝试查看输入框是否有值,以便我可以执行加法或减法。它应该是加法或减法,然后“答案”将放在“bal”中
    • @user3373430 - 用一点解释更新了我的答案。
    • @Jeremy 先生,谢谢。但是,第一个条件仍然正确执行。第二个条件不是。它只是从输入框“curbal”复制值。 >.
    • 它仍在从“curbal”复制值。附加信息,用户只需在输入框“余额”或“存款”中输入一个值。一次只有一个。
    【解决方案5】:

    试试这个

    var collect = parseFloat(document.getElementById("Collect").value) ||0;
    var dep     = parseFloat(document.getElementById("Deposit").value) ||0;
    var curr    = parseFloat(document.getElementById("CurBal").value) ||0;
    var bal     = document.getElementById("Balance");
    
    if (collect != 0)
    {
     bal.value = (collect + curr).toFixed(2)
     bal       = document.getElementById("Balance");
    }
    
    else if (dep != 0)
    {
     bal.value = (curr - dep).toFixed(2)
     bal       = document.getElementById("Balance");
    }
    

    【讨论】:

    • 谢谢@Preston S。我尝试了您的解决方案,第一个条件是正确执行(添加)。但是减法是不对的。它只是从路边复制值
    • @user3373430 请包含您的 html 以供进一步分析
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多