保持选中复选框状态,直到用户取消选中
keeping checked checkbox state until user unchecked
目前,在移动页面时,我想保留我在上一页中选中的复选框的状态。我也尝试了一下自己,在网上查了一下。我为此找到了一些解决方案,但这并不好。下面是我找到的示例,但它只在 Firefox 上哄骗,而在 Chrome 上没有。
<!DOCTYPE HTML>
<html><head>
<meta charset="utf-8">
<title>Persist checkboxes</title>
<style>
button {
margin-top: 8px;
}
</style>
</head>
<body>
<div>
<label for="option1">Option 1</label> <input type="checkbox"
id="option1">
</div>
<div>
<label for="option2">Option 2</label> <input type="checkbox"
id="option2">
</div>
<div>
<label for="option3">Option 3</label> <input type="checkbox"
id="option3">
</div>
<button>Check all</button>
<script
src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script
src="http://cdn.jsdelivr.net/jquery.cookie/1.4.0/jquery.cookie.min.js"></script>
<script>
function handleButtonClick(button) {
if ($(button).text().match("Check all")) {
$(":checkbox").prop("checked", true)
} else {
$(":checkbox").prop("checked", false)
}
;
updateButtonStatus();
}
function updateButtonStatus() {
var allChecked = $(":checkbox").length === $(":checkbox:checked").length;
$("button").text(allChecked ? "Uncheck all" : "Check all");
}
function updateCookie() {
var elementValues = {};
$(":checkbox").each(function() {
elementValues[this.id] = this.checked;
});
elementValues["buttonText"] = $("button").text();
$.cookie('elementValues', elementValues, {
expires : 7,
path : '/'
})
}
function repopulateFormELements() {
var elementValues = $.cookie('elementValues');
if (elementValues) {
Object.keys(elementValues).forEach(function(element) {
var checked = elementValues[element];
$("#" + element).prop('checked', checked);
});
$("button").text(elementValues["buttonText"])
}
}
$(":checkbox").on("change", function() {
updateButtonStatus();
updateCookie();
});
$("button").on("click", function() {
handleButtonClick(this);
updateCookie();
});
$.cookie.json = true;
repopulateFormELements();
</script>
请告诉我在这种情况下该怎么做。谢谢
它在 Firefox 中工作,只是因为 Firefox 会记住表单输入的状态。如果您希望它在所有浏览器中工作,您可以使用 cookie 来存储选中/未选中的值,或者使用仅用于存储键 => 值对的 localStorage(html5 中的新功能(
您希望在所有复选框上放置 onchange 侦听器,并将值(选中/未选中(存储在 LS 中。
var all_inputs = document.getElementsByTagName("input");
for(var i = 0; i < all_inputs.length; i++)
{
if( all_inputs[i].getAttribute("type") == "checkbox")
{
checkbox = all_inputs[i];
checkbox.addEventListener("change", function()
{
localStorage.setItem(checkbox.getAttribute("name"), ""+checkbox.checked ); // To convert boolean to string i put "" + checkbox.checked
}
}
}
但是,如果我们在本地存储中保存了状态,我们还必须在加载页面时更改复选框状态。
var all_inputs = document.getElementsByTagName("input");
document.onload = function()
{
for(var i = 0; i < all_inputs.length; i++)
{
if( all_inputs[i].getAttribute("type") == "checkbox")
{
checkbox = all_inputs[i];
if( (var value = localStorage.getItem(checkbox.getAttribute("name")) != null)
{
if(value == "true")
checkbox.checked = true;
else if(value == "false")
checkbox.checked = false;
}
}
}
}
编辑:所以要包含在脚本标签中的整个代码将是:
document.onload = function()
{
var all_inputs = document.getElementsByTagName("input");
document.onload = function()
{
for(var i = 0; i < all_inputs.length; i++)
{
if( all_inputs[i].getAttribute("type") == "checkbox")
{
checkbox = all_inputs[i];
// Change the state (checked/unchecked) if the state is saved in localStorage
if( (var value = localStorage.getItem(checkbox.getAttribute("name")) != null)
{
if(value == "true")
checkbox.checked = true;
else if(value == "false")
checkbox.checked = false;
}
// Then put onchange listeners to notify when checkbox state changes in order to save the state in the localStorage
checkbox.addEventListener("change", function()
{
localStorage.setItem(checkbox.getAttribute("name"), ""+checkbox.checked ); // I used : "" + checkbox.checked to convert boolean to string
}
}
}
}
}
相关文章:
- 如何解决取消抖动的用户输入上的竞争条件
- 如果用户在输入上按 Enter 键,则取消挖空速率限制扩展器
- Jquery:如何处理"停止/取消”;用户停止表单提交时的事件
- 如何在Formidable(Node.js)中取消用户上传
- 如何在点击链接后从用户取消对话框中获得回调以选择移动应用程序
- 您如何判断用户何时从默认的 JavaScript 提示符 () 中单击取消
- 如果用户发送另一个请求,请使用 .abort() 取消现有的 ajax 请求
- 动态覆盖jqueryUI对话框按钮(保存,取消等到用户选择)文本
- 保持选中复选框状态,直到用户取消选中
- 用户取消选择,然后从数组中删除项目并进行排列,具体取决于它们的选择方式
- 从我的应用中打开/关闭或取消授权用户,并列出应用中用户的操作
- “用户取消了身份验证”时,从Chrome扩展程序使用AuthWithOAuthPopup
- 高图:防止用户取消选中图表中的所有图例
- JavaScript:如果用户取消confirm(),文件输入onclick将阻止更改
- 如何使用jquery防止用户取消一组复选框输入中的所有复选
- 当用户取消提示时,如何避免在空值上填充文本区域
- 如何检测用户取消共享时,使用fb.ui
- AngularJS:不能忽略用户取消输入框后的更改事件
- 如果用户取消了对移动设备的触摸,则触发操作
- 在加载php页面时,会弹出js确认框,如果用户提交,我必须在php中执行sg,如果用户取消,我必须执行php中的其他操作