在本地存储中存储复选框

时间:2014-02-20 17:48:32

标签: javascript jquery checkbox local-storage

我能够以我想要的方式存储文本,但无法使复选框正常工作。无论是否选中,它都将复选框值存储为“打开”。我如何设置默认情况下存储“关闭”并选中“打开”?

可以实现这一目标:

var value = $(this).val() && $(this).prop(checked);

JS小提琴:http://jsfiddle.net/cRJ23/17/

Storage.prototype.setObj = function (key, obj) {
    return this.setItem(key, JSON.stringify(obj))
}
Storage.prototype.getObj = function (key) {
    return JSON.parse(this.getItem(key))
}

var Survey = {},
    Surveys = {},
    save = function () {
        $('input, select, textarea').each(function () {
            var value = $(this).val(),
                name = $(this).attr('name');
            console.log('Saving');
            console.log(name + ':' + value);
            Survey[name] = value;
        });

        if (localStorage.getObj('Surveys') != null) {
            Surveys = localStorage.getObj('Surveys');
        }
        Surveys[$('#FirstName').val() + '.' + $('#LastName').val()] = Survey; //store in big list
        localStorage.setObj('Surveys', Surveys);

    }

3 个答案:

答案 0 :(得分:2)

希望这会有所帮助:

var value = $(this).val();
var   name = $(this).attr('name');

if($(this).hasClass('checkers')){
    value = $(this).is(":checked")
    if(value){
        value='on';
    }else{
        value='off';
    }
}

http://jsfiddle.net/juvian/cRJ23/22/

您不应使用.val来检查是否选中了复选框,请使用.is('checked')

答案 1 :(得分:1)

您应该使用.prop()或属性.val()

而不是使用.checked来获取复选框的状态
   $('input, select, textarea').each(function () {
        var value = ($(this).is('[type="checkbox"]')) ? this.checked :$(this).val(),
            name = $(this).attr('name');
        console.log('Saving');
        console.log(name + ':' + value);
        Survey[name] = value;
    });

工作示例:http://jsfiddle.net/cRJ23/24/

答案 2 :(得分:0)

工作小提琴 http://jsfiddle.net/jFeLv/

val函数不像您期望的那样使用复选框,从中获取true或false的方法是使用is(':checked')函数。

$(this).is(':checked')

小提琴是代码的修改版本,修改一行似乎工作正常,通过短路if变量“value”来检查它是否是一个复选框。

($(this).attr('type','checkbox') ? value = $(this).val() : value = $(this).is(':checked'));

我希望这会有所帮助。