关于这个功能有很多话题,但我似乎无法让它工作。我已经用谷歌搜索了这个特定的案例,一堆链接让我在这里,但奇怪的是我似乎无法让它们工作。我所做的唯一工作如下: http ://dl.dropbox.com/u/2238080/a/!old/z.htm 但如您所见,它不存储盒子的状态是未经检查。
问候, 鲁本
关于这个功能有很多话题,但我似乎无法让它工作。我已经用谷歌搜索了这个特定的案例,一堆链接让我在这里,但奇怪的是我似乎无法让它们工作。我所做的唯一工作如下: http ://dl.dropbox.com/u/2238080/a/!old/z.htm 但如您所见,它不存储盒子的状态是未经检查。
问候, 鲁本
您可以将所有代码更改为:已编辑以删除不需要的部分。
$(document).ready( function(){
// read the current/previous setting
$("input.box[type=checkbox]").each(function() {
var name = $(this).attr('name');
if ($.cookie(name) && $.cookie(name) == "true") {
$(this).prop('checked', $.cookie(name));
}
});
// event management
$("input.box[type=checkbox]").change(function() {
var name = $(this).attr("name");
$.cookie(name, $(this).prop('checked'), {
path: '/',
expires: 365
});
});
});
包括摆脱所有这些:
$(document).ready( function(){
remember("[name=1]");
});
...
编辑:不那么冗长的版本:
$("input.box").each(function() {
var mycookie = $.cookie($(this).attr('name'));
if (mycookie && mycookie == "true") {
$(this).prop('checked', mycookie);
}
});
$("input.box").change(function() {
$.cookie($(this).attr("name"), $(this).prop('checked'), {
path: '/',
expires: 365
});
});
工作示例:http: //jsfiddle.net/R73vy/
如果您只对一个复选框感兴趣并且/或者您不想为此包含 jQuery cookie 插件,这里有两行代码:
//on page load set the checkbox to stored value or default to true
$('#turbo').prop('checked' , ( typeof sessionStorage.turbo !== 'undefined' ) ? (sessionStorage.turbo=='true') : true );
//when checkbox is updated, update stored value
$('#turbo').change( function() { sessionStorage.turbo = $(this).prop('checked'); });
这也不使用 cookie,因此节省了几个字节的带宽。更改为 localStorage 以延长已保存选择的生命周期。
如果您不严格需要使用 cookie,则使用较新的 HTML5 Web 存储(在这种情况下特别是 sessionStorage 对象)比存储在 cookie 中更容易和更好:
http://www.w3schools.com/html/html5_webstorage.asp
浏览器支持非常全面:
它应该与 jQuery < 1.6 一起使用,但从 1.6 开始,您应该将每个外观更改.attr("checked")
为.prop("checked")
编辑:更改了检查 cookie 的 if 条件
function remember( selector ){
$(selector).each(
function(){
var name = $(this).attr('name');
if( $.cookie( name ) && $.cookie(name)=="true" ){
$(this).prop('checked', true);
} else {
$(this).prop('checked', false)
}
$(this).change(
function(){
$.cookie(name, $(this).prop('checked'), { path: '/', expires: 365 });
}
);
}
);
}