来自 webstorage 执行功能的复选框值
checkbox value from webstorage performing function
我有多个复选框,单击这些复选框后,会将事件源添加到我的 jquery 全日历中。当我刷新页面时,我可以从存储中检索复选框值,但不会添加事件源。我必须取消选中然后重新选中复选框。
这是单击单个复选框所执行的功能。
$("#checkbox1").change(function() {
if (this.checked) {
$('#calendar').fullCalendar('addEventSource', 'EventListRed.php');
} else {
$('#calendar').fullCalendar('removeEventSource', 'EventListRed.php');
}
});
下面是我如何使用网络存储来保存复选框值
$(document).ready(function() {
var boxes = document.querySelectorAll("input[type='checkbox']");
for (var i = 0; i < boxes.length; i++) {
var box = boxes[i];
if (box.hasAttribute("store")) {
setupBox(box);
}
}
function setupBox(box) {
var storageId = box.getAttribute("store");
var oldVal = localStorage.getItem(storageId);
box.checked = oldVal === "true" ? true : false;
box.addEventListener("change", function() {
localStorage.setItem(storageId, this.checked);
});
}
});
编辑:
我已按要求添加了JSFiddle demo。
如您所见,复选框值已保存,但我的事件未从 EventsListRed.php.
加载
请注意,我不确定如何 link jsfiddle 中的 .php 文件。
我认为我的问题是我将复选框标记为选中但它没有触发更改功能。
我能够实现你想要实现的目标,但这似乎是一个 hack。
参见 JsFiddle Demo
HTML
<input type="checkbox" id="cbRed" store="checkbox3" class="chk" />
<label for="cbRed">Red</label>
<div id='calendar'></div>
CSS
body {
margin-top: 40px;
text-align: center;
font-size: 14px;
font-family: "Lucida Grande", Helvetica, Arial, Verdana, sans-serif;
}
#calendar {
width: 600px;
margin: 0 auto;
}
JS
$(document).ready(function() {
var calendar = $('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
});
//Checkbox removing/adding red events
$("#cbRed").change(function() {
if (this.checked) {
$('#calendar').fullCalendar('addEventSource', 'EventListRed.php');
} else {
$('#calendar').fullCalendar('removeEventSource', 'EventListRed.php');
}
});
});
$(document).ready(function() {
var boxes = document.querySelectorAll("input[type='checkbox']");
for (var i = 0; i < boxes.length; i++) {
var box = boxes[i];
if (box.hasAttribute("store")) {
setupBox(box);
}
}
function setupBox(box) {
var storageId = box.getAttribute("store");
var oldVal = localStorage.getItem(storageId);
$(box).on("change", function() {
localStorage.setItem(storageId, this.checked);
});
box.checked = oldVal === "true" ? true : false;
if (box.checked) {
$(box).trigger('change');
}
}
});
您需要先调用 .fullCalendar( 'refetchEvents' ),然后才能选中该复选框。
请查看官方文档
function setupBox(box) {
var storageId = box.getAttribute("store");
var oldVal = localStorage.getItem(storageId);
$(box).on("change", function() {
localStorage.setItem(storageId, this.checked);
});
box.checked = oldVal === "true" ? true : false;
$('#calendar').fullCalendar( 'refetchEvents' );
if (box.checked) {
$(box).trigger('change');
}
}
我有多个复选框,单击这些复选框后,会将事件源添加到我的 jquery 全日历中。当我刷新页面时,我可以从存储中检索复选框值,但不会添加事件源。我必须取消选中然后重新选中复选框。
这是单击单个复选框所执行的功能。
$("#checkbox1").change(function() {
if (this.checked) {
$('#calendar').fullCalendar('addEventSource', 'EventListRed.php');
} else {
$('#calendar').fullCalendar('removeEventSource', 'EventListRed.php');
}
});
下面是我如何使用网络存储来保存复选框值
$(document).ready(function() {
var boxes = document.querySelectorAll("input[type='checkbox']");
for (var i = 0; i < boxes.length; i++) {
var box = boxes[i];
if (box.hasAttribute("store")) {
setupBox(box);
}
}
function setupBox(box) {
var storageId = box.getAttribute("store");
var oldVal = localStorage.getItem(storageId);
box.checked = oldVal === "true" ? true : false;
box.addEventListener("change", function() {
localStorage.setItem(storageId, this.checked);
});
}
});
编辑:
我已按要求添加了JSFiddle demo。 如您所见,复选框值已保存,但我的事件未从 EventsListRed.php.
加载请注意,我不确定如何 link jsfiddle 中的 .php 文件。
我认为我的问题是我将复选框标记为选中但它没有触发更改功能。
我能够实现你想要实现的目标,但这似乎是一个 hack。 参见 JsFiddle Demo
HTML
<input type="checkbox" id="cbRed" store="checkbox3" class="chk" />
<label for="cbRed">Red</label>
<div id='calendar'></div>
CSS
body {
margin-top: 40px;
text-align: center;
font-size: 14px;
font-family: "Lucida Grande", Helvetica, Arial, Verdana, sans-serif;
}
#calendar {
width: 600px;
margin: 0 auto;
}
JS
$(document).ready(function() {
var calendar = $('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
});
//Checkbox removing/adding red events
$("#cbRed").change(function() {
if (this.checked) {
$('#calendar').fullCalendar('addEventSource', 'EventListRed.php');
} else {
$('#calendar').fullCalendar('removeEventSource', 'EventListRed.php');
}
});
});
$(document).ready(function() {
var boxes = document.querySelectorAll("input[type='checkbox']");
for (var i = 0; i < boxes.length; i++) {
var box = boxes[i];
if (box.hasAttribute("store")) {
setupBox(box);
}
}
function setupBox(box) {
var storageId = box.getAttribute("store");
var oldVal = localStorage.getItem(storageId);
$(box).on("change", function() {
localStorage.setItem(storageId, this.checked);
});
box.checked = oldVal === "true" ? true : false;
if (box.checked) {
$(box).trigger('change');
}
}
});
您需要先调用 .fullCalendar( 'refetchEvents' ),然后才能选中该复选框。
请查看官方文档 function setupBox(box) {
var storageId = box.getAttribute("store");
var oldVal = localStorage.getItem(storageId);
$(box).on("change", function() {
localStorage.setItem(storageId, this.checked);
});
box.checked = oldVal === "true" ? true : false;
$('#calendar').fullCalendar( 'refetchEvents' );
if (box.checked) {
$(box).trigger('change');
}
}