在当前会话/运行中存储复选框状态
Storing checkboxes state in current session/run
我的视图包括复选框clickevent侦听器,它应该在每次复选框状态被更改时触发:
<html>
<head>
<script type="text/javascript" src="~/scripts/jquery.unobtrusive-ajax.js"></script>
<script type="text/javascript" src="~/scripts/jquery-1.4.4.js"></script>
<title>TestChckBox</title>
<script type="text/javascript">
$(function () {
$(document).on("click", "input.chks", function (e) {
var _this = $(this);
var isChecked = _this.is(':checked');
$.post("@Url.Action("UpdateInput","Search")?id=" + _this.attr("id") +
"&newValue=" + isChecked, function (data) {
// response stuff should be here
});
});
});
</script>
</head>
——
@if (ViewBag.SliceList != null)
{
@*foreach(Pirsum.Models.HourSlice slice in this.Model) {*@
foreach (var slice in ViewBag.SliceList) {
<div class="row">
<input class="chks" type="checkbox" id="@HtmlHelper.GenerateIdFromName("cb_slice." + @slice.SliceID)" />
<label for="@HtmlHelper.GenerateIdFromName("cb_slice." + @slice.SliceID)">@slice.SliceName</label>
<span class="info">@slice.StartTime - @slice.EndTime</span>
</div>
}
}
<input type="submit" value="Submit" />
}
</body>
</html>
div用几个复选框和字符串正确填充,这些复选框和字符串来自于将viewbag中的项传递给视图的操作。
问题是上面的函数不起作用,当复选框被点击时,"UpdateInput"不会在搜索控制器中被触发,也不会在客户端发生任何点击事件。
我做错了什么?以及如何保存复选框状态(选中和未选中)正确在会话或在任何其他选项中,我可以临时保存在运行时设置的选中参数?
控制器动作参考,这一个发送数据到主体(相关的复选框和其他一些数据的问题)
public ActionResult TestChckbox()
{
int iInstId = 1;
Test.Models.DataLayer db = new Test.Models.DataLayer();
Test.Models.TestDB.context = new Models.TestDB();
IEnumerable<Test.Models.HourSlice> lst = db.GetSlices(context, iInstId).OrderBy(a => a.SliceID);
ViewBag.SliceList = lst;
return View(lst);
}
当选中/取消选中复选框时,该操作应该以复选框状态运行:
[HttpPost]
public ActionResult UpdateInput(int id, bool newValue)
{
//do your saving here.
return Json(true);
}
你正在使用jQuery 1.4.4;on
在那个版本中还不存在。你需要使用bind
或者升级你的jQuery版本。
除此之外,不要把脚本放在HTML的头部,如果你这样做,一定要把它们包装在$(document).ready()
中。此外,将委托附加到document
这样高级别的东西上是一个非常糟糕的主意。每次点击,在任何地方,都会导致jQuery查询DOM,看看它是否发生在类.chks
的对象上。你想要将委托附加到最接近父节点的父节点。最后,根据你的代码,你甚至不需要委托。只有当某些东西将被动态添加到DOM并且仍然需要触发事件处理程序时才使用委托。如果元素正好在那里,从页面加载,那么只需将处理程序直接附加到id或类。
相关文章:
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 在本地存储中选中复选框,但在加载时也要筛选列表
- 使用angular中的本地存储来存储选中的复选框
- 存储动态创建的复选框值
- 如何使用复选框启用选项并通过本地存储进行保存
- 如何将复选框呈现为从本地存储数据中选中的复选框
- 在表单提交中获取复选框值,并使用jQuery将其存储在变量中
- 如何保留输入复选框值的存储数组
- 复选框选中 持久化与 Angular js 中的本地存储
- 如何记住复选框是选中还是取消选中(单击时)使用本地存储并保存值
- 使用会话存储复选框的状态
- 如何使用 Javascript 或 jQuery 将输入类型复选框存储到 json 对象中
- HTML - 在本地存储复选框值并检索
- 使用本地存储维护复选框的选中状态
- 在 javascript 中存储选中的复选框值
- 尝试编辑时未选中的存储复选框值
- 在当前会话/运行中存储复选框状态
- 在本地存储中刷新页面时,我无法存储复选框状态
- 如何在页面加载时存储复选框的值和状态
- 如何在angularjs中存储复选框的有效ng更改事件