【发布时间】:2014-09-19 21:06:06
【问题描述】:
我有一张这样的桌子:
<table class="RepaymentTable">
<thead>
<tr>
<td style="width: 200px;">
</td>
<td>
%
</td>
<td class="y1">
Year 1
</td>
<td class="y2">
Year 2
</td>
<td class="y3">
Year 3
</td>
<td class="y4">
Year 4
</td>
<td class="y5">
Year 5
</td>
<td class="y6">
Year 6
</td>
<td>
Total
</td>
<td>
Return for creditors
</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<span id="MainContent_lblNetMonthlyIncome">Net Monthly Income</span>
</td>
<td>
</td>
<td class="y1">
€<input name="ctl00$MainContent$txtNetMonthlyIncomeY1" class="RepaymentValue" id="MainContent_txtNetMonthlyIncomeY1" style="width: 60px;" type="text" value="0.00">
</td>
<td class="y2">
€<input name="ctl00$MainContent$txtNetMonthlyIncomeY2" class="RepaymentValue" id="MainContent_txtNetMonthlyIncomeY2" style="width: 60px;" type="text" value="0.00">
</td>
<td class="y3">
€<input name="ctl00$MainContent$txtNetMonthlyIncomeY3" class="RepaymentValue" id="MainContent_txtNetMonthlyIncomeY3" style="width: 60px;" type="text" value="0.00">
</td>
<td class="y4">
€<input name="ctl00$MainContent$txtNetMonthlyIncomeY4" class="RepaymentValue" id="MainContent_txtNetMonthlyIncomeY4" style="width: 60px;" type="text" value="0.00">
</td>
<td class="y5">
€<input name="ctl00$MainContent$txtNetMonthlyIncomeY5" class="RepaymentValue" id="MainContent_txtNetMonthlyIncomeY5" style="width: 60px;" type="text" value="0.00">
</td>
<td class="y6">
€<input name="ctl00$MainContent$txtNetMonthlyIncomeY6" class="RepaymentValue" id="MainContent_txtNetMonthlyIncomeY6" style="width: 60px;" type="text" value="1000.00">
</td>
<td>
<span id="MainContent_lblNetMonthlyIncomeTotal">€ 1000.00</span>
</td>
<td>
</td>
</tr>
</tbody>
</table>
我想计算行中input 字段的总数,但使用$('y6').hide() 隐藏了某些列。我使用以下 jQuery 查找每一列并计算总数:
var NetMonthlyIncomeTotal = 0;
$("input[id*='txtNetMonthlyIncomeY']").each(function () {
if ($(this).val() != "" && $(this).is(":visible"))
NetMonthlyIncomeTotal += parseFloat($(this).val());
});
在 this jsfiddle 中,您可以看到如果您注释掉 $('y6').hide() 行,则总数为 1000(因为 MainContent_txtNetMonthlyIncomeY6 的值为 1000),但是如果您不加注释,则总数为 0。这符合我的预期,但是当从我的站点而不是 jsfiddle 运行时,$(this).is(":visible") 始终返回 true,因此总数始终为 1000。
检查 DOM Explorer 显示 <td class="y6" style="display: none;"> 正确设置了 display 样式,但在同一页面的调试器中,display 样式未设置,看起来像 <td class="y6">。我认为这是问题发生的地方。
为什么会发生这种情况?从视觉上看,该列是隐藏的,但仍在计算中。是否有更好的方法来查找列中的input 控件是否显示?
编辑:官方 api 似乎建议它与显示一起使用。 http://api.jquery.com/visible-selector/
【问题讨论】:
标签: javascript jquery css asp.net visibility