【问题标题】:How do I sum data inside nested foreach loops?如何对嵌套 foreach 循环中的数据求和?
【发布时间】:2018-03-12 14:15:18
【问题描述】:

我想对 foreach 循环中的所有数据求和,并使用 jquery 将其与外部 foreach 中的值进行比较,但我不知道如何对内部 foreach 中的所有数据点求和。

这里是视图:

<?php $no = 1;
foreach($data as $value)
{
  echo "<b>".$no."</b>";
  echo "<br>";
    foreach($datas as $values)
    {
     echo "<input type="number" id="valuea<?= $no ?>" value=".$values['myvalue']." onchange='sum(".$no.");check(".$no.")'>";
    }
  echo "<input type='text' id='totala"<?= $no ?>"' readonly>";
  echo "<input type='text' id='valueb"<?= $no ?>"' readonly value=".$value['myvalue'].">";

}

<button type='button' id='btn'>My Button</button>

这是求和函数:

function sum(id)
{
  var a = $('#valuea'+id).val();
  var total = sum all a values;
  ................

 $('#totala'+id).val(parseFloat(total));

在对所有 2 级 foreach 数据求和后,验证工作如下:

如果来自内部 foreach 的值 >= 来自外部 foreach 的值, 然后按钮显示,否则按钮被隐藏

这里是验证 jquery:

function check(id)
{
  var a= $('#totala'+id).val()
  var b =$('#valueb'+id).val();

这是我对逻辑感到困惑的地方......它应该是:

   if (a >= b)
   {
     $('#btn').show();
   }
   else
   {
     $('#btn').hide();
   }
}

【问题讨论】:

    标签: php jquery codeigniter foreach


    【解决方案1】:

    我会将每个内部 foreach 输入放在 div 内并给它们一个类,因此总而言之,您可以通过使用 each() 函数循环它们的 div 内的那些来选择它们。此外,给每个输入一个data-no 及其$no,这样您就可以轻松地从jquery 访问该值。然后,您可以直接在 jquery change() 函数内部进行检查和求和。像这样的...

    PHP

    <?php $no = 1;
    
    foreach($data as $value)
    {
        echo "<b>".$no."</b>";
        echo "<br>";
    
        echo "<div class=\"innerloop\">";
        foreach ($datas as $values)
            echo "<input type=\"number\" class=\"innerinput\" id=\"valuea".$no."\" data-no=\"".$no."\" value=\"".$values["myvalue"]."\" >";
        echo "</div>";
    
        echo "<input type=\"text\" id=\"totala".$no."\" readonly>";
        echo "<input type=\"text\" id=\"valueb".$no."\" value=\"".$value['myvalue']."\" readonly>";
    
    }
    
    <button type='button' id='btn'>My Button</button>
    
    ...........
    

    JQUERY

    $('input.innerinput').change(function() {
    
        var $innerloop = $(this).parent('div.innerloop');
        var no = $(this).data('no');
    
        var total = 0;
        $innerloop.children('input.innerinput').each(function() {
            total += parseFloat($(this).val());
        });
    
        $('input#totala'+no).val(total);
    
        if (total >= $('input#valueb'+no).val())
            $('#btn').show();
        else
            $('#btn').hide();
    
    });
    

    希望对你有帮助

    【讨论】:

    • 这 100% 有效。但它很难应用。但我做到了。谢谢
    猜你喜欢
    • 2015-05-29
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2019-09-24
    • 2017-12-25
    • 2016-07-25
    相关资源
    最近更新 更多