本地存储功能始终存储单选按钮值

时间:2014-03-24 18:34:27

标签: javascript jquery html5 radio-button local-storage

我的本​​地存储功能始终存储单选按钮值" 3"在本地存储中,无论选择如何,我都不知道为什么。每个其他元素都可以正确存储。

请看我的小提示,以显示我的问题:http://jsfiddle.net/3u7Xj/148/

我的功能:

$('input, select, textarea').each(function() {
    var value = $(this).val();
    var name = $(this).attr('name');

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

    if (this.name.match(/^multiselect_/)) {//removes buggy append
        return false;
    }

    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);

2 个答案:

答案 0 :(得分:2)

单选按钮都具有相同的名称,因为它们是单选按钮,并且它们都具有值。您的代码获取每个单选按钮的值,并将每个值保存到“Survey”对象的相同属性中。它看到的最后一个是最终被保存的那个。

你必须添加类似于复选框的代码:

if (!$(this).is(':radio') || this.checked)
  Survey[name] = value;

答案 1 :(得分:0)

正如Pointy在没有给出任何答案的情况下提到的那样,你正在迭代“输入,选择,textarea”元素。因此,在按下每个单选按钮后,将存储第三个和最后一个按钮。

承认您将输入放在<form>标记中,在纯Javascript中,您尝试做的是:

var items = document.forms;
for(var i in items){
    console.log(items[i].value);
}

这将显示<form>元素中每个输入的值,并使用其名称进行迭代。

(不知道如何用jQuery做到这一点)