这是我之前发布的一个相关问题...我试图将所有以'pull'开头的输入元素相加,并将该总数放在'totalpull'输入字段中。我有那个部分在工作。现在,如果用户在'totalpull'输入字段中手动输入内容并将每个'pull'输入设置为该值,我正在尝试计算平均值。尝试下面,但它不起作用......
//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>
答案 0 :(得分:0)
在sumValues函数中,您正在重复'input [name ^ = pull]'选择器。您应该将选择器传递给您的函数,或者根据您已经获得的值进行操作。
在sumValues中,'this'应该是输入的集合。因此,您应该能够执行以下操作:
$.fn.sumValues = function() {
var sum = 0;
this.each(function() {
sum += $(this).val();
});
return sum;
}
你也有'输入'和':输入'混淆了。 'input'是输入标记。 :输入是任何输入或选择标记。
答案 1 :(得分:0)
手动更改总和时,该值将分配到“pull *”字段:
$('input[name=totalpull]').bind('keyup', function() {
var inp = $('input[name^=pull]');
inp.val(parseFloat($(this).val()) / inp.length);
});
答案 2 :(得分: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
。