Framework7 可以很方便存储和解析表单的数据,特别是在 Ajax 加载的页面。并且,当你再次加载相同的页面之后,Framework7 可以自动帮你填充上次的内容!
要启用表单自动存储功能,只需要:
不需要任何JS代码就可以实现表单自动存储
<!-- Form has additional "store-data" class to enable form storage on this form --> <form id="my-form" class="list-block store-data"> <ul> <li> <div class="item-content"> <div class="item-inner"> <div class="item-title label">Name</div> <div class="item-input"> <!-- Make sure that input have "name attrobute" --> <input type="text" name="name" placeholder="Your name"> </div> </div> </div> </li> <li> <div class="item-content"> <div class="item-inner"> <div class="item-title label">E-mail</div> <div class="item-input"> <!-- Make sure that input have "name attrobute" --> <input type="email" name="email" placeholder="E-mail"> </div> </div> </div> </li> ... other form fields ... </ul> </form>
这是怎么实现的?其实非常简单,Framework7 会在表单有任何改动的时候调用 formToJSON,然后在"pageInit" 事件触发时调用 formFromJSON。
所有的表单数据都存储在 localStorage 中,每一个表单都有一个自己的key,key的规则是:localStorage.f7form-[formID]
,其中 [formId] 就是表单的 id 属性。每一个这样的key都包含了一个表单的所有数据。
下面是一些管理表单数据的可用的方法
myApp.formGetData(formId) - 获取id对应的表单的数据
myApp.formDeleteData(formId) - 删除id对应的表单数据
myApp.formStoreData(formId, formJSON) - store formJSON data for form with formId "id" attribute
myApp.formStoreData(formId, formJSON) - 把一个JSON数据存储到一个表单对应的localStorage中
<form id="my-form2" class="list-block store-data"> ... form fields ... </form> <div class="content-block"> <p><a href="#" class="button get-storage-data">Get Data</a></p> <p><a href="#" class="button delete-storage-data">Delete Data</a></p> <p><a href="#" class="button save-storage-data">Save Data</a></p> </div>
var myApp = new Framework7(); var $$ = Dom7; $$('.get-storage-data').on('click', function() { var storedData = myApp.formGetData('my-form2'); if(storedData) { alert(JSON.stringify(storedData)); } else { alert('There is no stored data for this form yet. Try to change any field') } }); $$('.delete-storage-data').on('click', function() { var storedData = myApp.formDeleteData('my-form2'); alert('Form data deleted') }); $$('.save-storage-data').on('click', function() { var storedData = myApp.formStoreData('my-form2', { 'name': 'John', 'email': 'john@doe.com', 'gender': 'female', 'switch': ['yes'], 'slider': 10 }); alert('Form data replaced, refresh browser to see changes') });
Event | Target | Description |
---|---|---|
formFromJSON | Form element | Event will be triggered after formFromJSON method called on form to fill form fields |
formToJSON | Form element | Event will be triggered after formToJSON method called on form to convert form fields to JSON |