ตัวอย่างและโค้ดต่อไปนี้ เป็นการประยุกต์การใช้งานน localStorage แบบฐานข้อมูล
โดยในตัวอย่าง สามารถที่จะเพิ่มและลบข้อมูลได้ แต่ไม่ได้เพิ่มเติมในส่วนของ
การสามารถแก้ไขข้อมูล เนื่องจากข้อจำกัดของประเภทข้อมูล ที่เป็นรูปแบบ string
การประยุกต์ใช้งานในครั้งนี้ เป็นแนวทางสำหรับนำไปใช้ใน mobile app ได้
ในตัวอย่าง จะเป็นการใช้งานร่วมกับ jquery และ css bootstrap
ตัวอย่าง
บันทึกข้อมูลฟอร์มลงใน localStorage
| # | Name | Tel | Address | Del |
|---|
คำอธิบายแสดงในโค้ด
ไฟล์ index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
</head>
<body>
<br>
<div style="margin:auto;width:80%;">
<h3> บันทึกข้อมูลฟอร์มลงใน localStorage </h3>
<form class="form" id="myFrom" method="post" role="form">
<div class="form-group">
<lable class="control-label">Name : </lable>
<input type="text" autocomplete="off" class="form-control" name="name">
</div>
<div class="form-group">
<lable class="control-label">Tel : </lable>
<input type="text" autocomplete="off" class="form-control" name="tel">
</div>
<div class="form-group">
<lable class="control-label">Address : </lable>
<input type="text" autocomplete="off" class="form-control" name="address">
</div>
<button type="submit" class="btn btn-primary">เพิ่มข้อมูล</button>
</form>
<br>
<table class="table table-striped">
<tr class="active">
<th>#</th>
<th>Name</th>
<th>Tel</th>
<th>Address</th>
<th width="35">Del</th>
</tr>
<tbody class="place-datarow">
<tr class="datarow" style="display:none;">
<td></td>
<td></td>
<td></td>
<td></td>
<td>
<button type="button" class="btn btn-danger" onclick="deleteData(this);">X</button>
</td>
</tr>
</tbody>
</table>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="script.js"></script>
</body>
</html>
ไฟล์ script.js
$(function () {
$("#myFrom").on("submit", function () {
// เก็บข้อมูลที่ส่งมาจากฟอร์มในรูปแบบ array object
var arrData = $(this).serializeArray();
// เริ่มการจัดรูปแบบชุดข้อมูลใหม่ ให้อยู่ในรูปแบบ object
var arrLength = arrData.length;
var strVal = "";
for (var s in arrData) {
strVal += arrData[s].name + ":'" + arrData[s].value+"'";
if (arrLength - 1 != s) {
strVal += ",";
} else {
strVal = "{" + strVal + "}";
}
}
// ถ้ามีข้อมูลอยู่แล้ว ให้เพิ่มเข้าไปต่อจากข้อมูลเดิม
if(localStorage.dataWeb){
// ดึงข้อมูลเดิมมาเก็บไว้ในตัวแปร array
var showDatas = JSON.parse("[" + localStorage.dataWeb + "]");
// หาจำนวนแถวข้อมูลทั้งหมด
var lengthData=showDatas.length;
// เพิ่มข้อมูลใหม่เก็บต่อจากข้อมูลเดิม
localStorage.dataWeb+=","+JSON.stringify(strVal);
// กำหนดตำแหน่งที่ต้องการแสดงรายการใหม่ในตาราง
var begin =lengthData;
}else{
// บักทึกข้อมูลครั้งแรก
localStorage.dataWeb=JSON.stringify(strVal);
// กำหนดตำแหน่งที่ต้องการแสดงรายการใหม่ในตาราง
var begin =0;
}
// หลังจากบันทึกข้อมูลแล้ว มีการแสดงข้อมูล
var showDatas = JSON.parse("[" + localStorage.dataWeb + "]");
for(var data in showDatas){// วันลูปแสดงข้อมูลตามถวข้อมูลที่มี
if(data>=begin){// ตำแหน่งเริ่มต้นต่อจากข้อมูลเดิม
// แปลงค่าข้อมูลเป็น object เพื่อเนียกใช้ค่าข้อมูล
var obj = eval("("+showDatas[data]+")");
// clone แถวแรกของตารางที่ซ่อนไว้ แล้ว แสดงข้อมูล
// โดยนำข้อมูลใส่ในคอลัมน์ให้ถูกต้อง
var placeObj=$(".datarow:eq(0)").clone(true)
.removeAttr("style")
.appendTo($(".place-datarow"));
placeObj.find("td:eq(0)").text(parseInt(data)+1);
placeObj.find("td:eq(1)").text(obj.name);
placeObj.find("td:eq(2)").text(obj.tel);
placeObj.find("td:eq(3)").text(obj.address);
}
}
// รีเซ็ตฟอร์มใหม่ ให้พร้อมกรอกข้อมูลใหม่
$(this)[0].reset();
return false;
});
// ตรวจสอบตอนเปิดมาครั้งแรก ถ้ามีข้อมูล ให้ไปเรียกใช้งานฟังก์ชั่นแสดงข้อมูล
if(localStorage.dataWeb){
showData(0);
}else{
// ซ่อนแถวแรกที่ไว้สำหรับ clone ถ้าไม่มีข้อมูล
$(".datarow").hide();
}
});
// ฟังก์ชั่นการแสดงข้อมูล โดยส่งค่าตำแหน่งที่ต้องการแสดงข้าไปด้วย
var showData = function (begin){
// ถ้ามีการข้อมูลที่บันทึก ใน localStorage ชื่อ dataWeb อยู่
if(localStorage.dataWeb!=""){
// แปลงคค่าข้อมูลเป็น array
var showDatas = JSON.parse("[" + localStorage.dataWeb + "]");
// วนลูปแสดงข้อมูล จากตัวแปร array
for(var data in showDatas){
if(data>=begin){ // ตำแหน่งข้อมูลเริีมต้นที่จะแสดง
// แปลงชุดข้อมูลเป็น object เพื่อเรียกแสดงค่าข้อมูล
var obj = eval("("+showDatas[data]+")");
// clone แถวแรกของตารางที่ซ่อนไว้ แล้ว แสดงข้อมูล
// โดยนำข้อมูลใส่ในคอลัมน์ให้ถูกต้อง
var placeObj=$(".datarow:eq(0)").clone(true)
.removeAttr("style")
.appendTo($(".place-datarow"));
placeObj.find("td:eq(0)").text(parseInt(data)+1);
placeObj.find("td:eq(1)").text(obj.name);
placeObj.find("td:eq(2)").text(obj.tel);
placeObj.find("td:eq(3)").text(obj.address);
}
}
}
};
// ฟังก์ชั่นการลบข้อมูล
var deleteData = function (obj){
// หาค่า index ตำแหน่งของแถวของข้อมูลที่ต้องการลบ
var Id = $(obj).parents("tr").index();
// กำหนดตำแหน่งข้อมูลใน array ที่ต้องการลบ
var IdDel=Id-1;
// ดึงข้อมูลมาเก็บในตัวแปร array
var showDatas = JSON.parse("[" + localStorage.dataWeb + "]");
// หาจำนวนแถวของข้อมูลทั้งหมด
var lengthData=showDatas.length;
// กำหนดตัวแปร สำหรับเก็บข้อมูลใหม่ หลังจากลบ เพื่อบันทึกเข้าไปใหม่
var strVal = "";
for(var data in showDatas){
if(data!=IdDel){ // ข้อมูลใหม่ ต้องไม่มีข้อมูลที่จะลบ
strVal+=JSON.stringify(showDatas[data]);
strVal += ",";
}
}
var last_strVal=strVal.substring(0,strVal.length-1);
// ลบแถวของรายการที่เลือกลบ
$(obj).parents("tr").remove();
// ถ้าข้อมูลใหม่ ไม่เป็นค่าว่าง
if(last_strVal!=""){
// บันทึกข้อมูลใหม่ หลังจากลบรายการแล้ว
localStorage.dataWeb=last_strVal;
}else{
// ถ้าลบรายการจนหม่ด ค่าที่จะบันทึก ให้กำหนดค่าเป็นค่าว่าง
localStorage.dataWeb="";
}
};
function hasStorage() {
return typeof (Storage) !== "undefined" ? true : false;
}