我有这个表,它总是有一行:
<table id="contractCoverablesGrid" width="600" align="center">
<tbody>
<tr>
@foreach (var coverableItem in Model.ContractCoverablesList)
{
<td>
<div id="dataListItem">
@Html.Hidden("coverableID", coverableItem.CoverID)
@Html.Label(coverableItem.Name)
@Html.CheckBox("coverableItemCheckBox", coverableItem.IsApplied)
</div>
</td>
}
</tr>
</tbody>
</table>
我希望能够遍历每个单元格,找出是否选中了复选框,然后捕获该单元格中的ID,就像看到隐藏字段一样。
我试过这样做,但问题是当它到达if子句时;它没有检测到复选框:
//Coverable Items
var count = 0;
var allCoverableItems = [];
$("#contractCoverablesGrid tbody tr td").each(function () {
var cell = $(this);
var coverableItem = {};
if (cell.find('td input[type="checkbox"]').is(':checked')) { // Here, it doesn't detect checked boxes!!
var coverableId = cell.find("input[name='coverableID']")[count].value;
coverableItem["CoverID"] = coverableId;
allCoverableItems.push(coverableItem);
}
count++;
});
我想知道这里有什么问题 - 我对JQuery / Javascript有点新鲜。
非常感谢。
修改
这是工作代码:
//Coverable Items
var allCoverableItems = [];
$("#contractCoverablesGrid tbody tr td").each(function () {
var cell = $(this);
var coverableItem = {};
if (cell.find('input[type="checkbox"]').is(':checked')) {
var coverableId = cell.find("input[name='coverableID']").val();
coverableItem["CoverID"] = coverableId;
allCoverableItems.push(coverableItem);
}
});
我删除了计数并按照下面的答案加上;我使用val()而不是value;
答案 0 :(得分:3)
麻烦在于您的选择器。您正在cell
内搜索td,但cell
已经是td。将其更改为:
cell.find('input[type="checkbox"]')
当您尝试通过[count]
访问隐藏字段时,下一行也会出现问题。看起来当您开始编写此代码时,您打算对该行进行操作,但在某些时候选择迭代单元格。下一行应该是:
var coverableId = cell.find("input[name='coverableID']").val();