【问题标题】:Javascript - returning concatenates instead of sum of variables from inputJavascript - 从输入返回连接而不是变量的总和
【发布时间】:2017-12-09 23:09:33
【问题描述】:

我正在尝试使用 .each() 从输入字段中获取值并将它们相加以在另一个输入值中显示总和。但不幸的是,尽管使用了 parseInt() 我无法得到总和。

HTML

<input type=text name=value[] id=value class="value">
<input type=text name=value[] id=value class="value">
<input type=text name=totalvalue id=totalvalue>  

JavaScript

var totalvalue = parseInt(0);
$(document).on("focusout",".value",function() {
    $(".value").each(function() {
        totalvalue = parseInt(totalvalue + $(this).val());
    });
    $("#totalvalue").val(totalvalue);
});

JSFiddle Demo

【问题讨论】:

  • 你需要解析每个字符串...$(this).val()是一个字符串...parseInt($(this).val())是一个数字
  • 哦,谢谢。请将其发布为答案,以便我可以选择它作为解决方案。非常感谢您的及时回复
  • 让别人有积分:p
  • 因为它们是您要添加的字符串。

标签: javascript jquery each


【解决方案1】:

你应该在focusout函数中声明totalvalue,因为它总是会显示两个输入文本的总和,并且在求和时将输入值传递为空状态!!!

$(document).on("focusout",".value",function() {
    var totalvalue = 0;
    $(".value").each(function() {
        if($(this).val() == "") return;
        totalvalue +=  parseInt($(this).val());
    });
    $("#totalvalue").val(totalvalue);
});

【讨论】:

    【解决方案2】:

    您正在将 NaN 数据类型添加到 Number 数据类型。所以你需要在执行加法操作之前对其进行限制。

    请检查这个

    var totalvalue = 0;
    $(document).on("focusout",".value",function() {
        $(".value").each(function() {
            if(isNaN($(this).val()) || $(this).val() != ''){
                totalvalue = totalvalue + parseInt($(this).val());
          }
      });
      $("#totalvalue").val(totalvalue);
    
    });
    

    【讨论】:

      【解决方案3】:

      在输入值上尝试parseFloat()

      parseFloat($(this).val()));
      

      var totalvalue = parseInt(0);
      $(document).on("focusout",".value",function() {
          $(".value").each(function() {
              totalvalue = (totalvalue + parseFloat($(this).val()));
          });
          $("#totalvalue").val(totalvalue);
      });
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <input type=text name=value[] id=value class="value">
      <input type=text name=totalvalue id=totalvalue>

      【讨论】:

        【解决方案4】:

        如果您的目的是根据您的代码,那么它将始终与第一个框值相加。

          var value = parseInt($(this).val());
            if(value)
            totalvalue = totalvalue + value;
        });
        

        否则,您应该详细说明您的问题,以便提供正确的答案。

        【讨论】:

          【解决方案5】:

          您的附加字符串。 $(this).val() 是一个字符串。只需将其解析为 int 或 float。

          【讨论】:

            【解决方案6】:

            你正在解析的行是说

            totalValue 添加到输入的字符串中,然后解析结果。

            这就是它连接的原因。相反,您需要添加parseInt()totalValue outside 以便它说

            获取totalValue 并将解析后的输入值添加到其中。

            这样

            totalvalue = totalvalue + parseInt($(this).val());
            

            这可以进一步缩短为

            totalvalue += parseInt($(this).val());
            

            【讨论】:

              猜你喜欢
              • 2011-08-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-12-27
              • 1970-01-01
              • 1970-01-01
              • 2020-08-20
              相关资源
              最近更新 更多