【问题标题】:PHP number format doesn't allow jquery sumPHP数字格式不允许jquery sum
【发布时间】:2017-07-03 21:07:30
【问题描述】:

我在 jquery 中使用数字进行计算时遇到问题。当数字是 PHP 数字格式时,jquery 不会检测到这些数字。请找到代码和输出的屏幕截图。任何帮助将不胜感激。

  <tr  class="noBorder">
  <td><span class="circle">1A</span></td>
  <td><input type="text" class="amnt" value="<?php echo number_format($a1,2);?>"/></td>
  </tr>
  <tr  class="noBorder">
  <td><span class="circle">4</span></td>
  <td><input type="text" class="amnt" id="4tax" /></td>
  </tr>
  <tr  class="noBorder">
  <td><span class="circle">5A</span></td>
  <td><input type="text" class="amnt" id="5a" /></td>
  </tr>
  <tr  class="noBorder">
  <td><span class="circle">7</span></td>
  <td><input type="text" name="7"  class="amnt"/></td>
  </tr>
  <tr  class="noBorder">
  <td><span class="circle">7A</span></td>
  <td><input type="text" name="7a" class="amnt" /></td>
  </tr>
  <tr  class="noBorder">
  <td>1A+4+5A+7+7A</td>
  <td><span class="circle">8A</span></td>
  <td>
<input type="text" id="8a" />
  </td>
  </tr>

jQuery

$(".amnt").on("keydown keyup", function() {
        calculateSum();
    });
function calculateSum() {
    var sum2 = 0; 
    $(".amnt").each(function() {
        //add only if the value is number
        if (!isNaN(this.value) && this.value.length != 0) {
            sum2 += parseFloat(this.value);
            //$(this).css("background-color", "#FEFFB0");
        }

    });

}

输出: 8A=1A+4+5A+7+7A

【问题讨论】:

  • 请找到代码的相关部分... 请贴出相关代码或高亮显示:) 顺便说一句,没有像 PHP 编号这样的东西
  • 我已经突出显示了代码 :) 我的意思是 PHP number_format :)
  • 检查标记(呈现的 html)而不是 PHP 以查看发生了什么。另外,如果您将 else if 更改为 else(暂时)并取消注释代码,会发生什么情况?
  • 谢谢。我会删除它

标签: javascript php jquery number-formatting


【解决方案1】:

我会建议您使用 Javascript 而不是 PHP 来显示数字。首先在你的 html 中设置 value=""

    $(document).ready(function() {
    //use json_encode to make the php script readable by javascript
     var amntval = Number(<?php echo json_encode($a1,2);?>); 

    //display the value in the amnt field 
    $(".amnt").val(amntval.toLocaleString('en'));

    //now run your calculations
    $(".amnt").on("keydown keyup", function() {
        calculateSum();
    });
    function calculateSum() {
         var sum2 = 0; 
         $(".amnt").each(function() {
         //add only if the value is number
        if (!isNaN(this.value) && this.value.length != 0) {
            sum2 += parseFloat(this.value);
           //$(this).css("background-color", "#FEFFB0");
    }

});

}


});

这对我有用,我没有用你的代码测试过,但我相信它应该可以工作!

【讨论】:

    【解决方案2】:

    Javascript 无法处理以, 作为千位分隔符的数字。它不是数字,而是人工格式化的字符串。如下操作

    <?php echo number_format($a1, 2, '.', '');?>
    

    UPD。在 js 中你可以删除 ,this.value.replace(/,/g, "") 来删除逗号:

    parseFloat("12,233.12")
    >12
    parseFloat("12,233.12".replace(/,/g,""))
    >12233.12
    

    $(".amnt").on("keydown keyup", function() {
            calculateSum();
        });
    function calculateSum() {
        var sum2 = 0; 
        $(".amnt").each(function() {
            var thevalue = this.value.replace(/,/g,'');
    
            if (!isNaN(thevalue ) && thevalue .length != 0) {
                sum2 += parseFloat(thevalue);
                $("#sum").text(sum2).css("background-color", "#FEFFB0");
            }
        });
    
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type = "text" class= "amnt" value = "8,133,231.17"><br/>
    <input type = "text" class= "amnt" value = ""><br/>
    <input type = "text" class= "amnt" value = ""><br/>
    <div id = "sum"></div>

    【讨论】:

    • 感谢您的回复。我试图改变 sum2 += parseFloat((this.value).replace(",",""));但是没有用。
    • $(".amnt").each(function() { sum2 += parseFloat((this.value).replace(",",""));});我这样做了。但没用
    • 请在投票时发表评论。它不是像 OP 所希望的那样总和吗?
    • @shukshin.ivan 请注意,当您编辑某个代码时,请检查它是否可以正常工作。否则请勿触摸
    • @shukshin.ivan 没关系,但以后要小心。
    【解决方案3】:

    请检查这个:-

    $(".amnt").on("keydown keyup", function() {
        calculateSum();
    });
    function calculateSum() {
    var sum2 = 0; 
    $(".amnt").each(function() {
        //add only if the value is number
        if (this.value.indexOf(',') > -1) { 
          sum2  += parseFloat(this.value.split(",").join(""));
        }else if(!isNaN(this.value) && this.value.length != 0) {
            sum2 += parseFloat(this.value);
            $("#sum").text(sum2).css("background-color", "#FEFFB0");
        }
    });
    
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type = "text" class= "amnt" value = "8,133,231.17"><br/>
    <input type = "text" class= "amnt" value = ""><br/>
    <input type = "text" class= "amnt" value = ""><br/>
    <div id = "sum"></div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2016-09-03
      • 2013-11-17
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      相关资源
      最近更新 更多