Я могу хранить текст так, как хочу, но не могу получить флажки для правильной работы. Он сохраняет значения флажка как "включено", независимо от того, установлен ли он или нет. Как я могу установить, чтобы сохранить "выключено" по умолчанию и "включено", если отмечено?
что бы достичь этого:
var value = $(this).val() && $(this).prop(checked);
JS Fiddle: 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);
}
Надеюсь это поможет:
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')
Вместо использования .val()
чтобы получить состояние флажка, вы должны использовать .prop()
или свойство .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/
Рабочая скрипка http://jsfiddle.net/jFeLv/
Функция val не работает так, как вы ожидали бы с помощью флажков, способ получить истинное или ложное из них - использовать функцию is (': checked').
$(this).is(':checked')
Скрипка - это модифицированная версия вашего кода, изменяя одну строку, которая, кажется, работает нормально, сокращая if if для проверки переменной "value", чтобы убедиться, что это флажок.
($(this).attr('type','checkbox') ? value = $(this).val() : value = $(this).is(':checked'));
Надеюсь, это поможет.