我使用的代码看起来像这样:
$(document).ready(function() {
var total = $('#exam-percent-weightage > td > input').not('[type=hidden]').not('[disabled=disabled]').get().reduce(function(a, b) {
return specialParseFloat(a === undefined ? 0 : a.value) + specialParseFloat(b === undefined ? 0 : b.value);
});
console.log(total);
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<tr id="exam-percent-weightage">
<td class="weightagePadding"> <strong>First Term</strong>
</td>
<td>
<input name="data[Exam][0][percent_weightage]" class="form-control percentWeight" value="0.00" step="any" id="Exam0PercentWeightage" type="number">
<input name="data[Exam][0][id]" class="testId" value="30" id="Exam0Id" type="hidden">
</td>
<td> %</td>
<td class="buttonPadding">+</td>
<td class="weightagePadding"> <strong>Second Term</strong>
</td>
<td>
<input name="data[Exam][1][percent_weightage]" class="form-control percentWeight" value="0.00" step="any" id="Exam1PercentWeightage" type="number">
<input name="data[Exam][1][id]" class="testId" value="31" id="Exam1Id" type="hidden">
</td>
<td> %</td>
<td class="buttonPadding">+</td>
<td class="weightagePadding"> <strong>Third Term</strong>
</td>
<td>
<input name="data[Exam][2][percent_weightage]" class="form-control percentWeight" value="0.00" step="any" id="Exam2PercentWeightage" type="number">
<input name="data[Exam][2][id]" class="testId" value="32" id="Exam2Id" type="hidden">
</td>
<td> %</td>
<td> <strong>=</strong>
</td>
<td>
<input class="form-control" disabled="disabled" id="total-weight" type="number">
</td>
<td> %</td>
<td class="buttonPadding">
<button type="submit" class="action-mainbtn">Save</button>
</td>
</tr>Run Code Online (Sandbox Code Playgroud)
注意:我必须使用的 jQuery 版本实际上是 1.12.1(SO 片段工具中不可用)
仅供参考:我已经定义了specialParseFloat,错误可能与此无关。无论如何,函数如下:
function specialParseFloat(something) {
return parseFloat(something) || 0;
}
Run Code Online (Sandbox Code Playgroud)
我在浏览器(FF)中得到的行为是,reduce 仅返回最后一个值,而不是添加输入框中的所有值。然而,这在只有两个输入的情况下可以正常工作。
我做错了什么?
感谢Bastien Mercier,我重新阅读了文档。我做错了两件事。
首先,我假设 params 是reduce((firstValue, secondValue)我太愚蠢了),而应该是(accumulator, currentValue)
其次,我没有传递初始值,根据文档,这会导致索引从 1 开始。
现在的更正将更改为a === undefined ? 0 : a.value或a === undefined ? 0 : a只是a(因为我们传递初始值)并传递初始值 0 以强制reduce从数组中的第 0 个位置开始。
| 归档时间: |
|
| 查看次数: |
2995 次 |
| 最近记录: |