我有一个包含两个不同列的表,我想将它们加到各自的总和中。现在我只是添加其中一个列,我可以通过再次制作相同的JS来添加第二列,但是值的名称不同但不是那么漂亮。 我该怎么做才能更改它以便计算 ue 列以及 egen 并吐出两个结果,总和和 SUM2
<table>
<tr>
<td><asp:TextBox ID="TextBox1" runat="server">Number</asp:TextBox></td>
<td class="egen"><asp:TextBox ID="TextBox56" runat="server" Columns="1">56</asp:TextBox></td>
<td class="ue"><asp:TextBox ID="TextBox57" runat="server" Columns="1">57</asp:TextBox></td>
</tr>
<tr>
<td><asp:TextBox ID="TextBox2" runat="server">Worker</asp:TextBox></td>
<td class="egen"><asp:TextBox ID="TextBox58" runat="server" Columns="1">58</asp:TextBox></td>
<td class="ue"><asp:TextBox ID="TextBox59" runat="server" Columns="1">59</asp:TextBox></td>
</tr>
<tr>
<td align="right">Sum:</td>
<td align="center"><span id="sum"></span></td>
<td align="center"><span id="sum2"></span></td
</tr>
</table>
这是我用来添加 egen 列中的值的javascript。
$(document).ready(function () {
//iterate through each td based on class / input and add keyup
//handler to trigger sum event
$(".egen :input").each(function () {
$(this).keyup(function () {
calculateSum();
});
});
});
function calculateSum() {
var sum = 0;
// iterate through each td based on class and add the values from the input
$(".egen :input").each(function () {
var value = $(this).val();
// add only if the value is number
if (!isNaN(value) && value.length != 0) {
sum += parseFloat(value);
}
});
$('#sum').text(sum);
};
答案 0 :(得分:2)
您可以通过以下选择器定位.egen
或 .ue
中的所有元素:
$('.egen :input, .ue :input')
或者如果您愿意:
$('.egen, .ue').find(':input')
顺便说一下,您不需要迭代元素集合来将keyup
个侦听器绑定到它们,您可以立即绑定到整个集合:
$('.egen :input, .ue :input').keyup(calculateSum);
修改强>
我注意到#sum
和#sum2
的存在,您可能需要单独汇总列。你可以这样做:
$('.egen :input').keyup(function() { calculateSum('.egen'); });
$('.ue :input').keyup(function() { calculateSum('.ue'); });
function calculateSum(container) {
var sum = 0;
$(container).find(':input').each(function() {
...
});
}
然后当然分别设置#sum
或#sum2
的值。这可以通过多种方式实现。要么传递id,就像我们传递上面的类一样,或者你使用名为sum
的类,并让相应的td
重用egen
和{{1类。这样您就可以使用ue
访问正确的总和。另一个解决方案是返回总和,并在你的keyup监听器中设置它:
$(container+'.sum').val()
另请注意,您的解析可以简化。对于许多无效值,$('.ue :input').keyup(function() {
$('#sum2').val( calculateSum('.ue') );
});
会产生parseFloat
,包括空字符串和NaN
,因此您无需在调用之前仔细检查您的值。 null
将评估为false,因此您可以总是按NaN
求和,因为结果为(parsedResult || 0)
,如果0
为parsedResult
,则总和不受影响
因此:
NaN
答案 1 :(得分:1)
将您的总和<span>
ID更改为其各自的class_sum,如
<span id="egen_sum"></span>
<span id="ui_sum"></span>
...
这样我们就可以使用一个函数
试试这个
$('.egen :input, .ue :input').keyup(function(){
var keyupClass= $(this).parent().hasClass('egen') ? 'egen' : 'ue';
calculateSum(keyupClass);
});
function calculateSum(keyupClass) {
var sum = 0;
$("."+ keyupClass+" :input").each(function () {
var value = $(this).val();
// add only if the value is number
if (!isNaN(value) && value.length != 0) {
sum += parseFloat(value);
}
});
$('#'+keyupClass+"_sum").text(sum);
};
这适用于任意数量的输入......只需要确保相应的总和得到正确的ID ...