0

这是一个与我之前发布的问题相关的问题......我正在尝试对所有以“pull”开头的输入元素求和,并将该总数放在“totalpull”输入字段中。我有那部分工作。现在,如果用户在“totalpull”输入字段中手动输入内容并将每个“拉”输入设置为该值,我正在尝试计算平均值。在下面尝试,但它不起作用......

//This is the sum formula, which works
        $('input[name^=pull]').bind('keyup', function() {
                $('#totalpull').val( $('input[name^=pull]').sumValues() );
        });

        $.fn.sumValues = function() {
                var sum = 0; 
                $("input[name^='pull']").each(function() {
                        if ( $(this).is(':input') ) {
                                var val = $(this).val();
                        } else {
                                var val = $(this).text();
                        }
                        sum += parseFloat( ('0' + val).replace(/[^0-9-\.]/g, ''), 10 );
                });
                return sum;
        };


//This is the avg formula, which does not work
//Keep getting v / rowCount.replace is not a function
        $('input[name=totalpull]').bind('keyup', function() {
                $('input[name^=pull]').each(function() {
                        $(this).val( $('input[name=totalpull').avgValues() );
                });
        });
        $.fn.avgValues = function() {
                var avg = 0;
                var v = $("input[name=totalpull").val();
                var rowCount = $("#convertRow tr").length; 
                avg += parseFloat( (v / rowCount).replace(/[^0-9-\.]/g, ''), 10);
                return avg;
        }

<table id="convert">
<tbody>
<tr><td><input type="text" value="" name="pull0" /></td></tr>
<tr><td><input type="text" value="" name="pull1" /></td></tr>
<tr><td><input type="text" value="" name="pull2" /></td></tr>
<tr><td><input type="text" value="" name="pull3" /></td></tr>
</tbody>

<tfoot>
<input type="text" id="totalpull" name="totalpull" value="" />
</tfoot>
</table>
4

3 回答 3

0

在您的 sumValues 函数中,您正在重复 'input[name^=pull]' 选择器。您应该将选择器传递给您的函数,或者对您已经获得的值进行操作。

在 sumValues 中,“this”应该是输入的集合。因此,您应该能够执行以下操作:

$.fn.sumValues = function() {
  var sum = 0;
  this.each(function() {
    sum += $(this).val();
  });
  return sum;
}

您还混淆了 'input' 和 ':input'。'input' 是一个输入标签。:input 是任何输入或选择标签。

于 2010-03-10T20:59:10.057 回答
0

当手动更改总和时,该值将分配到“pull*”字段:

$('input[name=totalpull]').bind('keyup', function() {
    var inp = $('input[name^=pull]');
    inp.val(parseFloat($(this).val()) / inp.length);
});​
于 2010-03-10T21:04:27.033 回答
0

您的直接问题只是语法错误:

 avg += parseFloat( (v / rowCount).replace(/[^0-9-\.]/g, ''), 10);

号码上没有replace。你需要一个toString投入:

 avg += parseFloat( (v / rowCount).toString().replace(/[^0-9-\.]/g, ''), 10 );

顺便说一句,字符串也没有/(如 v 是),但 JavaScript 会尝试为您转换它,NaN如果不能,则给您。

于 2010-03-10T21:36:58.253 回答