2013-11-13 3 views
7

Есть ли способ сэкономить из в LocalStorage и повторно использовать его снова, как эта логика:Сохранить форму с помощью LocalStorage HTML5

формы :::::::::::: saveINTO :::::::::::::::> LocalStorage

< форма :::::::::::: GETFROM :::::::::::: ::: localstorage

после заполнения формы данными, Я хочу сохранить форму с ее содержимым в localstorage, а затем, когда хочу заполнить другую из сохраненных данных.

<form> 
    First name: <input type="text" name="firstname"><br> 
    Last name: <input type="text" name="lastname"> 
    <button onclick="StoreData();">store into local storage</button> 
</form> 
<button onclick="RenderForm();">render from data again </button> 
<form id="Copyform"><form> 

JSFIDDLE пожалуйста JSFIDDLE ответ.

ОБНОВЛЕНО

+1

Вы можете хранить только строки, так что вам придется сериализовать содержимое вашей формы элементов первым. – CBroe

+0

Вы хотите сохранить только значения формы правильно? –

+0

@CBroe Я знаю, что я могу хранить строки для информации: P – Muath

ответ

8

Вы можете сделать это легко, но если вы хотите сохранить массив вам нужно сериализовать или кодировать его первым, потому что LocalStorage не имеет дело с массивами. например .:

var yourObject = $('#your-form').serializeObject();

Чтобы сохранить вы либо:

localStorage['variablename'] = JSON.stringify(yourObject) или localStorage.setItem('testObject', JSON.stringify(yourObject));

и получить: JSON.parse(localStorage['yourObject']); или JSON.parse(localStorage.getItem('yourObject'));, а затем значения полей доступны как yourObject.fieldName;

EDIT: В приведенном выше примере я использовал serializeObject, который является плагином jQuery. Используемый код приведен ниже. (Вы можете использовать serializeArray, если вы предпочитаете, но вы должны будете сделать больше работы, чтобы сделать данные пригодными для использования один раз извлекаться):

jQuery.fn.serializeObject = function() { 
    var formData = {}; 
    var formArray = this.serializeArray(); 

    for(var i = 0, n = formArray.length; i < n; ++i) 
    formData[formArray[i].name] = formArray[i].value; 

    return formData; 
}; 
+0

как вы проверяете, включен ли localstorage – amdixon

+0

@spacebean после получения элемента, который я должен десериализовать? – Muath

+0

Да, извините Моа, добавила эту деталь выше. – spacebean

2

Другим вариантом было бы использовать существующий плагин.

Например, persisto - это проект с открытым исходным кодом, который обеспечивает легкий интерфейс для localStorage/sessionStorage и автоматизирует сохранение для полей формы (ввода, переключателей и флажков).
:

persisto features

Обратите внимание, что это требует JQuery как зависимость (Отказ от ответственности Я автор.).

Например:

<form id="originalForm"> 
    First name: <input type="text" name="firstname"><br> 
    Last name: <input type="text" name="lastname"> 
    <button type="submit">store into local storage</button> 
</form> 
<button id="renderForm">render from data again </button> 
<form id="copyForm"><form> 

может быть обработан следующим образом:

// Maintain client's preferences in localStorage: 
var settingsStore = PersistentObject("mySettings"); 

// Initialize form elements with currently stored data 
settingsStore.writeToForm("#originalForm"); 

// Allow users to edit and save settings: 
$("#settingsForm").submit(function(e){ 
    // ... maybe some validations here ... 
    settingsStore.readFromForm(this); 
    e.preventDefault(); 
}); 

// Write data to another form: 
$("#renderForm").submit(function(e){ 
    settingsStore.writeToForm("#copyForm"); 
}); 
+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Обзор] (/ review/low-quality-posts/12713734) – Cristik

+0

Я бы подумал, что ссылки проекта Github довольно стабильны, но в любом случае: я добавил некоторые подробности. – mar10

+0

Чтобы рекомендовать библиотеку (особенно написанную вами), вы должны точно указать, как эта библиотека решит проблему OP; включая код, используя вашу библиотеку, которая решит их точную проблему. –

Смежные вопросы