【发布时间】:2011-12-25 13:29:00
【问题描述】:
我已经在这个问题上苦苦挣扎了几个小时,但不了解我的行为。我在任何其他帖子上都没有发现这个问题(尽管我发现许多与.each() 方法相关)。
反正我在这里:
这是我要迭代的 HTML:
<input type="text" id="investment" /><br />
<table id="fundTable">
<tr>
<td class="rentability"> <span class="someClass"> 0.12 </span> </td>
<td class="absoluteResult"></td>
</tr>
<tr>
<td class="rentability"> <span class="someClass"> 0.24 </span> </td>
<td class="absoluteResult"></td>
</tr>
<tr>
...
</table>
这个想法是:用户将在文本字段#investment 中输入一个值。
onChange,JQuery 将通过将用户输入乘以 .rentability 值来填充 .absoluteResult 表列。
这里是 JQuery 部分:
$('#investment').change(function() {
var investment = $('#investment').val(),
currentlyDisplayedRentability,
updatedAbsoluteResult
$('#fundTable tr').each(function(index, tableRow) {
currentlyDisplayedRentability = $(tableRow + "span").html()
currentlyDisplayedRentability = parseFloat(currentlyDisplayedRentability)
updatedAbsoluteResult = currentlyDisplayedRentability * investment
$(tableRow + "td[class=absoluteResult]").html(updatedAbsoluteResult)
})
})
发生的情况是所有.absoluteResult 行都使用.rentability 列的第一行的值填充。
所有的 pultiplication 只使用一个值。就好像.each() 在一个列 (.absoluteResult) 上正确迭代,而不是在另一列 (.rentability) 上。
我不明白为什么。
【问题讨论】:
-
我在您的代码中没有看到 ID 为
#fundTable的表格/tbody。所以这没有任何意义:$('#fundTable tr').each( ... ); -
tableRow变量不是字符串,它是当前元素。您的意思可能是 $("span", tableRow) 或 $(tableRow).find("span")。 -
@biziclop 是对的。这里发生的情况是您没有执行足够的分而治之的调试,因此得出了
each没有正确迭代的结论,事实上,您完全依赖于用于测试该迭代的复杂代码。如果该代码有问题(确实有问题),那么您的整个测试就会中断。相反,您应该让console.logged 一些关于.each内部当前对象的信息,以排除迭代问题是导致问题的原因。 -
您还在选择 ID 为“fundTable”的表格 - 我在您的 html 示例中没有看到这样的表格。
标签: jquery loops html-table jquery-selectors each