todolist案例
html结构
功能
功能一: 文本框里面输入内容,按下回车,就可以生成待办事项。
功能二: 点击待办事项复选框,就可以把当前数据添加到已完成事项里面。
功能三: 点击已完成事项复选框,就可以把当前数据添加到待办事项里面。
功能四: 但是本页面内容刷新页面不会丢失。
功能五: 删除事项
功能六: 统计事件个数
分析
对于功能四,需要用到本地存储localStorage,不管按下回车,还是点击复选框,都是把本地存储的数据加载到页面中。
存储数据的格式
var todolist = [{ title:'xxx', done:false }]
注: 1.本地存储只能存储字符串的数据格式 把数据对象改变为字符串格式 JSON.stringify()
2.获取本地存储数据,需要把里面的字符串数据转换为对象格式 JSON.parse()
以上需要几个常用函数:读取本地数据getData() 、新数组保存本地存储数据saveData() 、渲染加载数据load()
注: 将统计事件个数和动态创建li放入渲染加载数据函数load()中
$(function () {
load();
$("#title").on("keydown", function(event) {
if (event.keyCode === 13) {
if ($(this).val() === "") {
alert("请输入您要的操作");
} else {
var local = getData();
local.push({ title: $(this).val(), done: false });
saveData(local);
load();
$(this).val("");
}
}
});
$("ol,ul").on("click", "a", function () {
var data = getData();
var index = $(this).attr("id");
data.splice(index, 1);
saveData(data);
load();
})
$("ol,ul").on("click", "input", function () {
var data = getData();
var index = $(this).siblings("a").attr("id");
data[index].done = $(this).prop("checked");
saveData(data);
load();
})
function getData() {
var data = localStorage.getItem("todolist");
if (data != null) {
return JSON.parse(data)
} else {
return [];
}
}
function saveData(data) {
localStorage.setItem("todolist", JSON.stringify(data))
}
function load() {
var data = getData();
$("ol,ul").empty();
var todoCount = 0;
var doneCount = 0
$.each(data, function (i, ele) {
if (ele.done) {
$("ul").prepend("<li><input type='checkbox' checked='checked'><p>" + ele.title + "</p><a href='javascript:;' id=" + i + "></a></li>")
doneCount++;
} else {
$("ol").prepend("<li><input type='checkbox'><p>" + ele.title + "</p><a href='javascript:;' id=" + i + "></a></li>")
todoCount++;
}
});
$("#todocount").text(todoCount);
$("#donecount").text(doneCount);
}
})
|