我的本地存储功能始终存储单选按钮值" 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);
答案 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做到这一点)