【发布时间】:2016-11-23 04:55:56
【问题描述】:
您好,我在这里有这个循环,它生成从站点到楼层到房间的复选框,当我检查站点时,所有楼层都被选中,但如果我手动检查所有楼层但站点复选框未选中,则相反。请帮助纠正我的错误
<div class="form-group ">
<ul id="siterecord">
@for (int i = 0; i < Model.SASites.Count; i++)
{
@*Generate the sites*@
<li>
@Html.CheckBoxFor(m => m.SASites[i].IsCheck, new { @class = "parent" })
@Html.LabelFor(m => m.SASites[i].IsCheck, Model.SASites[i].SiteName)
@Html.HiddenFor(m => m.SASites[i].SiteId)
@Html.HiddenFor(m => m.SASites[i].SiteName)
@*Generate the floors for each site*@
@for (int j = 0; j < Model.SASites[i].SAFloors.Count; j++)
{
<div style="margin-left:50px; clear:both;">
<label>Floor @Model.SASites[i].SAFloors[j].FloorName</label>
</div>
<br />
<div style="margin-left:20px;">
<ul class="suiterecord">
@for (int k = 0; k < Model.SASites[i].SAFloors[j].SARooms.Count; k++)
{
<li style="float:left;">
@Html.CheckBoxFor(m => m.SASites[i].SAFloors[j].SARooms[k].IsCheck, new { @class = "child chkboxCss" })
<div class="ARSLabel">
@Html.LabelFor(m => m.SASites[i].SAFloors[j].SARooms[k].IsCheck, Model.SASites[i].SAFloors[j].SARooms[k].RoomName)
@Html.HiddenFor(m => m.SASites[i].SAFloors[j].SARooms[k].RoomId)
@Html.HiddenFor(m => m.SASites[i].SAFloors[j].SARooms[k].RoomName)
</div>
</li>
if ((k + 1) % 5 == 0)
{
@Html.Raw("</ul><div style='clear:both'></div><br><ul class='suiterecord'>");
}
}
</ul>
<div style='clear:both'></div><br>
</div>
}
</li>
}
</ul>
</div>
jQuery 脚本
<script>
$('.parent').click(function () {
var isChecked = $(this).is(':checked');
var children = $(this).closest('li').find('.child');
$.each(children, function (index, item) {
$(this).prop('checked', isChecked);
});
});
$('.child').click(function () {
var parent = $(this).closest('li').find('.parent');
var isChecked = $(this).is(':checked');
if (!isChecked) {
// the parent must be unchecked
parent.prop('checked', false);
} else {
// check if all siblings have the same checked status
var siblings = $(this).siblings('.child');
var total = siblings.length;
var matches = siblings.filter(function () {
return $(this).prop('checked') == isChecked;
}).length;
if (matches === total) {
parent.prop('checked', isChecked);
}
}
})
我的代码现在可以正常检查父项,所有子项都已检查。但它并没有以相反的方式工作,即检查所有未检查父母的孩子
【问题讨论】:
-
能否请您发布您的输出 HTML 结构,很难理解您的 HTML 结构将如何来。
-
@Samir 我已经上传了结果图片
-
能否请您添加HTML结构,仅通过图像(由您发布)很难获得HTML结构,我们玩了父/子组合。如果您提供 HTMl,那么编写脚本将很容易。
-
@samir 我在 MVC 中使用 Razor View。只有这部分循环其他 C# 代码与此无关。在我添加一个新的标签循环之前一切正常,您可以查看旧代码stackoverflow.com/questions/40483523/…
-
在您的浏览器调试器中,您得到正确的 HTML 了吗?只需从调试器复制该 HTML 结构并将其发布到此处。我试图准备一个 HTML w.r.t 你的循环,但即使我成功了,也可能是我错过了一些标签的情况,因为脚本会中断,这是我不想要的。
标签: javascript c# jquery asp.net-mvc-4