获取输入,添加到页面,并使用纯JS存储在localStorage中
Get Input, Add to Page, and Store in localStorage with Pure JS
我试图让一些代码工作。 手头的任务是:
首先,创建一个表单来获取用户数据,如下所示:
<form>
<fieldset>
<label id="namefield">Name</label>
<input type="text" name="firstlast" id="username">
</br>
<label id="address">Address</label>
<input type="text" name="address" id="useraddress">
</br>
<label id="emailfield">Email</label>
<input type="email" name="email" id="useremail">
</br>
<button type="submit" id="submit">Save</button>
</fieldset>
</form>
其次,编写Javascript:
- 创建包含数组的 JSON 对象。
- 创建用于存储用户输入的数据对象。
- 创建点击函数以:
- 从每个表单域中获取值。
- 使用上述值构造一个新对象。
- 将对象推送到 JSON 对象数组中。
- 将新数据添加到页面。
- 将数据存储在本地存储中。
- 在页面加载时检查本地存储并将数据写入页面(如果找到)。
.JS:
// create data structure
var addressBook = {"entries": []} // this should be JSON array object
// create data object to contain form data
function AddressBookEntry(name, address, email) {
this.name = name;
this.address = address;
this.email = email;
}
// create onclick function for button
document.getElementById("submit").onclick = function() {
// get values from each form field
var name = document.getElementById("username").value;
var address = document.getElementById("useraddress").value;
var email = document.getElementById("useremail").value;
// create new object using consturctor
var newAddress = new AddressBookEntry(name, address, email);
var jAddress = JSON.stringify(newAddress);
// push new object into array
addressBook.push(jAddress);
localStorage.setItem("addressBook", JSON.stringify(addressBook));
// add information to page
// write data to the page
// store the data
// read from storage and write to page if data found
我能够创建 JSON 对象,从表单中获取数据并将其放入构造函数中以创建一个新对象,然后将其转换为 JSON 对象,但我无法将此对象传递给数组,此时一切都崩溃了。
我错过了什么?
我认为你需要做的是 addressBook.entries.push(jAddress)
.
地址簿的类型是对象而不是数组
您正在尝试将 () 推送到 addressBook,您将其定义为一个包含数组(条目)的对象。尝试:
addressBook.entries.push( newAddress );
请注意,您不需要字符串化newAddress即可将其添加到数组或localStorage中。在地址簿上使用 JSON.stringify() 就足够了。
我已将您的 onclick 处理程序包装到一个函数中,该函数在页面加载时触发,以确保表单提交对象在尝试添加事件处理程序之前存在。您可以在浏览器脚本调试器中运行该页,以测试数组中的输出。
这是一个完整的测试:
<html>
<head>
<script type="text/javascript">
// create data object to contain form data
function AddressBookEntry(name, address, email) {
this.name = name;
this.address = address;
this.email = email;
}
function go(){
// create data structure
var addressBook = {entries:[]}; // this should be JSON array object
// create onclick function for button
document.getElementById("submit").onclick = function() {
// get values from each form field
var name = document.getElementById("username").value;
var address = document.getElementById("useraddress").value;
var email = document.getElementById("useremail").value;
// create new object using consturctor
var newAddress = new AddressBookEntry(name, address, email);
//var jAddress = JSON.stringify(newAddress);
// push new object into array
addressBook.entries.push(newAddress);
localStorage.setItem("addressBook", JSON.stringify(addressBook));
// add information to page
// write data to the page
console.log(addressBook);
// store the data
// read from storage and write to page if data found
return true;
}
}
</script>
</head>
<body onload="go()">
<form>
<fieldset>
<label id="namefield">Name</label>
<input type="text" name="firstlast" id="username">
</br>
<label id="address">Address</label>
<input type="text" name="address" id="useraddress">
</br>
<label id="emailfield">Email</label>
<input type="email" name="email" id="useremail">
</br>
<button type="submit" id="submit">Save</button>
</fieldset>
</form>
</body>
</html>
相关文章:
- Ember.js-接口状态应该存储在哪里
- 将脚本缓存到本地存储的basket.js概念仍然是一个好主意吗
- 在EXT窗体面板中填充EXT JS存储
- 画布/JS存储矢量/位图对象
- 使用 JS 存储/计算日期/时间
- EXT JS存储未从getJson调用正确加载数据
- 使用Meteor.js存储JSON对象
- 用成员函数扩展React.js存储数据结构
- js存储文本值及其点击次数
- Angular.js:存储http.get请求中的变量,以便在不同的$scope函数中全局使用
- 使用mongoose和node.js存储查询后的变量数据
- 在Ext JS存储中反序列化json数据时区分模型类型
- 用d3.js存储一个日期和这3天
- 使用JQuery/JS存储<td>单击()
- 使用. getjson获取数据,使用Knockout.JS存储数据
- Ext Js 存储连接筛选器
- 在 js 存储库上 github 中的构建状态是什么意思
- 获取输入,添加到页面,并使用纯JS存储在localStorage中
- 使用node.js存储图像会产生错误
- 将CSS和JS存储在Android应用程序中,该应用程序具有webview,如phonegap