(jQuery)单击cookie保存复选框状态

时间:2012-12-18 16:02:13

标签: javascript jquery html forms jquery-cookie

关于这个功能有很多主题,但我似乎无法让它发挥作用。我已经搜索了这个特定的案例,并且有一些链接让我在这里,但是绰绰有神,我似乎无法让他们工作。我唯一能做的就是: http://dl.dropbox.com/u/2238080/a/!old/z.htm 但正如您所看到的,它不会存储未选中框的状态。

此致 鲁

4 个答案:

答案 0 :(得分:16)

您可以将所有代码更改为:EDITED以删除不需要的部分。

$(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/

答案 1 :(得分:2)

如果您不需要使用cookie,使用较新的HTML5 Web存储(在本例中特别是sessionStorage对象)比存储在cookie中要容易得多,而且要好得多:

http://www.w3schools.com/html/html5_webstorage.asp

浏览器支持非常全面:

http://caniuse.com/#search=sessionstorage

答案 2 :(得分:2)

如果您只对一个复选框感兴趣而且/或者您不希望为此包含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以延长已保存选择的生命周期。

答案 3 :(得分:1)

它应该适用于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 });
                        }
                    );
                }
            );
        }