我在HTML中有这个表:
<table class="dataTable" id="repaymentShedule">
<thead>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
</tr>
</thead>
<tbody data-bind="foreach: creditDetails">
<tr>
<td class="paymentDate" data-bind="text: dateOfPayment"></td>
<td class="startBalance" data-bind="text: beginingBalance"></td>
<td class="monthlyInt" data-bind="text: monthlyInterest"></td>
<td class="principal"><input data-bind="value: princpalPayment"></input></td>
<td class="monthlyInst" data-bind="text: monthlyInstallment"></td>
<td class="remainingBalance" data-bind="text: endingBalance"></td>
<td class="paid"><input type="checkbox" data-bind="checked: isPaid, disable: isPaid, click: testFunc, value: true"></td> <!-- value: true moje da ne e nujno -->
<td class="currentDate" data-bind="text: currentDate"></td>
</tr>
</tbody>
</table>
值来自knockout js
绑定。
我正在尝试使用以下函数获取principal
类的所有值:
updateValues = function(){
$("tbody").find("tr").each(function() {
var principal = $(this).find('td.principal').val();
console.log(principal);
});
};
Bu控制台返回:(an empty string)
修改
只有将paymentDate
更改为.val()
.text()
课程中正常运行
我很确定我没有以正确的方式获得价值,或者绑定不允许我获得当前值,但我真的无法发现问题
答案 0 :(得分:6)
你需要这样做:
var principal = $(this).find('td.principal :input').val();
使用类input
获取表格单元格中principal
元素的值。
另外,根据.val() API Documentation: -
.val()方法主要用于获取表单元素的值 例如input,select和textarea。对于元素,.val()方法返回一个数组 包含每个选定的选项;如果未选择任何选项,则返回 空。
因此,在使用代码时,您将在控制台中获得空字符串。
上述功能在paymentDate类上没有任何问题 只能将.val()更改为.text()
这也解释了为什么在将.val()
表格单元格的.text()
更改为paymentDate
后得到了正确的值,因为它内部没有任何input
元素
答案 1 :(得分:3)
<td class="principal"><input data-bind="value: princpalPayment"></input></td>
您不需要结束</input>
代码,因为input
元素是自动关闭的。
你只需要更好地瞄准。
var principal = $(this).find('td.principal input').val();
答案 2 :(得分:2)
如果你正在使用KnockoutJS,你可能根本不需要使用jQuery 。从ViewModel中获取正确的值,如下所示:
updateValues = function() {
var details = MyMainViewModel.creditDetails();
for (var i = 0; i < details.length; i++) {
var principal = details[i].princpalPayment();
console.log(principal);
}
};
不依赖于您的视图,因此单元可测试。此外,如果将此函数放在范围的正确位(例如,绑定到数据表的observable),则在要使用结果时,您将可以访问所有相关的其他可观察对象。
答案 3 :(得分:1)
你没有找到你看td值的输入值,这显然不存在 这是一个带有固定jquery的jsfiddle
updateValues = function(){
$("tbody").find("tr").each(function() {
var principal = $(this).find('td.principal').find('input').val();
console.log(principal);
});
};
答案 4 :(得分:1)
var principal = $(this).find('td.principal').val();
console.log(principal);
上面不起作用,因为td
也有输入元素。
因为你想要td
里面的输入元素的值,所以请这样使用:
var principal = $(this).find('td.principal input').val();
// Or use this
var principal = $(this).find('td.principal > input').val();
console.log(principal);
请参阅this了解