javascript - JavaScript求和函数不起作用

标签 javascript php jquery

我在对文本框进行求和时遇到问题,但如果我按“添加更多”按钮,文本框就会出现。所以我将它与单击函数混合,结果是 求和函数只能对第一个文本框求和。

这是我的 JavaScript :

var i = $('table tr').length;
var count = $('table tr').length;
var row = i;
var a = 0;

for (a = 0; a <= i; a++) {
  $(".addmore_" + a).on('click', function (a) {
    return function() {
    var box = $("#box_"+ a);
    box.val( Number(box.val())+1 );

      var data = "<td><input class='form-control sedang' type='text' id='packinglist_" + a + "' name='packinglist"+ a +"[]'/></td>";
      $("#keatas_" + a).append(data);

    $("#packinglist_"+ a).each(function() {

            $(this).keyup(function(){
                calculateSum();
            });
        });


    function calculateSum() {

        var sum = 0;
        //iterate through each textboxes and add the values
        $("#packinglist_"+ a).each(function() {

            //add only if the value is number
            if(!isNaN(this.value) && this.value.length!=0) {
                sum += parseFloat(this.value);
            }

        });
        //.toFixed() method will roundoff the final sum to 2 decimal places
        $("#netto_"+ a).val(sum.toFixed(2));



                        };

            }
    }(a));

}

这是我与 php 混合的 html :

for($i=1;$i<=$_POST['jumlahdata'];$i++)
            {
                    $nomor = $a[0];
                    $iden = $nomor + $i;
                        echo"   <tr>
                                <td><span id='snum'>$i.</span></td>
                                <input class='form-control' type='hidden' id='hiddenlot_$i' name='hiddenlot[]' />
                                <input class='form-control' type='hidden' id='hiddencustomer_$i' name='hiddencustomer[]' />
                                <input class='form-control' type='hidden' id='hiddenprice_$i' name='hiddenprice[]' />
                                <td><input class='form-control' type='text' id='jenisbenang_$i' name='jenisbenang[]' readonly/></td>
                                <td><input class='form-control' type='text' id='warna_$i' name='warna[]' readonly/></td>                                
                                <td><input class='form-control' type='text' id='lot_$i' name='lot[]' required/></td>
                                <td><input class='form-control sedang' type='text' id='netto_$i' name='netto[]' required/> </td>
                                <td><input class='form-control pendek' type='text' id='box_$i' name='box[]' /> </td>
                                <td><input class='form-control pendek' type='text' id='cones_$i' name='cones[]'/> </td>
                                <td><input class='form-control' type='text' id='keterangan_$i' name='keterangan[]'/>
                                <input class='form-control' type='hidden' id='keterangan_$i' name='identitas[]' value='$iden'/>
                                 </td>
                            </tr>
                             <tr>
                                <td><a><span class='glyphicon glyphicon-plus addmore_$i' id='$i'></span></a><br>
                                <a><span class='glyphicon glyphicon-minus delete_$i'></a> </td>
                            <td colspan='10'>
                                <table id='keatas_$i' class='keatas'>
                                <tr>

                                </tr>   
                                </table>
                            </tr>
                            </td>";

            }   

如有任何回复,我们将不胜感激,谢谢

<强> Fiddle here

最佳答案

问题是在单击回调中应用 keyup 事件监听器。每次点击“.addMore_”+一个元素,您都会附加一个 <td>第 a^ 行中的 ID 为“packinglist_”+a。之后,您将在该元素上附加 keyup 监听器。您正在使用 id 进行选择,它仅返回第一个匹配项,而不是全部。所以它唯一将监听器附加到第一个 <td>在带有 id 的那一行。更正以代码形式给出。
或者,您可以使用类来完成此操作。但您需要小心,不要将事件多次附加到一个元素。这会导致意外行为,有时甚至导致浏览器崩溃。


在calculateSum函数中,您还通过id访问元素,它只返回一个元素。这应该通过为每行的输入框提供唯一的类来解决。

 var i = $('table tr').length;
 var count = $('table tr').length;
 var row = i;
 var a = 0;

for (a = 0; a <= i; a++) {
  $(".addmore_" + a).on('click',function () {
  return function() {
  var box = $("#box_"+ a);
  box.val( Number(box.val())+1 );

  var rowIdentifier="packinglist_" + a;
  var data = $("<td><input class='form-control sedang "+rowIdentifier +"' type='text' id='packinglist_" + a + "' name='packinglist"+ a +"[]'/></td>");

  $("#keatas_" + a).append(data);

data.find('input').on('keyup',function(){
            calculateSum();
        });

function calculateSum() {

    var sum = 0;
    //iterate through each textboxes and add the values
    $(".packinglist_"+ a).each(function() {

        //add only if the value is number
        if(!isNaN(this.value) && this.value.length!=0) {
            sum += parseFloat(this.value);
        }

    });
    //.toFixed() method will roundoff the final sum to 2 decimal places
    $("#netto_"+ a).val(sum.toFixed(2));
                    };
        }
}(a));
}

请告诉我这是否有帮助。尝试简化html结构。很难理解。

https://jsfiddle.net/rishabdev919/mj3gsLxe/
查看工作 fiddle

关于javascript - JavaScript求和函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34380439/

相关文章:

javascript - 无法为 <select> 列表框添加 <options>

javascript - jQuery 验证没有获得选项

php - 使用 jQuery 从 HTML 页面重定向到 PHP 页面

Javascript 不导入从 git 安装的 npm 包

Javascript - 创建可链接的函数而不污染一切

php - 如何使用symfony和doctrine处理巨大的选择查询?

javascript - oncheck 复选框显示主干中的数据

javascript - 如何使用 jquery 使用 name 属性解析远程页面中的图像?

php - 如何使用 php 与 mysql 中的表进行交互

php - 关系方法必须从 Laravel 4 中不查看的模型调用返回类型为 Illuminate\Database\Eloquent\Relations\Relation 的对象