我有一个名为“mail”的输入字段。我想在本地存储中添加mailaddresses和id。 mailaddress的值应来自输入字段 每次添加mailaddress时,“mail”和id都应该计算在内。目前,vars“id”和“mail”都有静态值。
有人能给我一个暗示我怎么能这样做的?
这是我的代码:
var id = 1;
var mail = "Mail";
$(".store").on("click", function(){
var mailaddress = localStorage.getItem("mailaddress");
var obj = [];
if(mailaddress){
obj= JSON.parse(mailaddress);
}
obj.push({"id": id, "mail":mail});
localStorage.setItem("mailaddress",JSON.stringify(obj));
});
$("#show").on("click", function(){
var item = JSON.parse(localStorage.getItem("mailaddress"));
alert(item);
console.log(item);
});
$('#reset').click(function(){
localStorage.clear();
});
<div id="storage">
<input type="text" id="mail" value=""/>
<button class="store">store</button>
<button id="reset">reset</button>
<button id="show">show</button></div>
答案 0 :(得分:1)
邮件部分非常简单。替换单击处理程序中的邮件变量,只需获取值:
obj.push({"id": id, "mail":$('#mail').val()});
你可能想要做价值&amp;模式检查输入的电子邮件,这样你就不会得到垃圾邮件。
对于id,你已经拥有了一个id数组,为什么不抓住最大的一个并且+1呢?
if (obj.length > 0) {
id = Math.max.apply(null, obj.map(function (entry) { return parseFloat(entry.id); })) + 1;
}
else {
id = 1;
}
好的,让我解释一下这段代码。
obj.map(function (entry) { return parseFloat(entry.id); })
Map是一个迭代数组的函数,并返回一个新数组,其中包含每个return语句的值。因此,如果您有一个[1,2,3]
数组且运行[1,2,3].map(function(v) { return v + 1; });
,那么您将[2,3,4]
。我在这种情况下使用它获取一组id。可能没有必要使用parseFloat,但我对本地存储保持谨慎。
Math.max通常可用于返回两个或更多值之间的最大数字:Math.max(2, 5)
将返回5.在这种情况下,我使用apply,因此我可以传递一个数组。它与:Math.max.apply(null, [2,5]);
答案 1 :(得分:1)
您可以检查localStorage中的对象数量,并每次增加id(如果您希望id从1开始,则加1)。
$(".store").on("click", function () {
var mailaddress = localStorage.getItem("mailaddress");
var obj = [];
if (mailaddress) {
obj = JSON.parse(mailaddress);
}
var id = obj.length + 1; // increment the id
var mail = $('#mail').val(); // get the textbox value
obj.push({ // push it to obj
"id": id,
"mail": mail
});
localStorage.setItem("mailaddress", JSON.stringify(obj));
});