Advertisement
asimryu

indexedDB - 친구 추가,수정,삭제 포함

Dec 5th, 2017
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 8.02 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>IndexedDB</title>
  6.     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  7.     <link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/start/jquery-ui.css">
  8.     <script src="http://code.jquery.com/jquery-latest.js"></script>
  9.     <script src="http://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
  10.     <style>
  11.         .add-friend { display: none; }
  12.     </style>
  13. </head>
  14. <body>
  15.     <div class="container">
  16.         <div class="jumbotron">
  17.             <h1 class="text-center">My Friends</h1>
  18.             <p class="text-center"><button class="btn-add btn btn-primary">친구추가</button></p>
  19.         </div>
  20.         <div class="add-friend">
  21.             <h2>친구추가</h2>
  22.             <form onsubmit="return false">
  23.                 <div class="form-group">
  24.                     <input type="text" name="fname" id="fname" class="form-control" placeholder="이름">
  25.                 </div>
  26.                 <div class="form-group">
  27.                     <input type="text" name="femail" id="femail" class="form-control" placeholder="Email">
  28.                 </div>
  29.                 <div class="form-group">
  30.                     <input type="text" name="fphone" id="fphone" class="form-control" placeholder="전화번호">
  31.                 </div>
  32.                 <div class="form-group">
  33.                     <input type="text" name="fschool" id="fschool" class="form-control" placeholder="학교">
  34.                 </div>
  35.                 <div class="form-group">
  36.                     <a href="#!" class="btn-save btn btn-success">친구등록</a>
  37.                 </div>
  38.             </form>
  39.         </div>
  40.  
  41.         <div>
  42.             <table id="flist" class="table">
  43.                 <tr class="active">
  44.                     <td>ID</td>
  45.                     <td>이름</td>
  46.                     <td>Email</td>
  47.                     <td>연락처</td>
  48.                     <td>학교</td>
  49.                     <td>수정/삭제</td>
  50.                 </tr>
  51.             </table>
  52.         </div>
  53.  
  54.     </div>
  55.  
  56. <div class="edit-friend" style="display: none;">
  57.             <h2>친구수정</h2>
  58.             <form onsubmit="return false">
  59.                 <div class="form-group">
  60.                     <input type="hidden" name="fid" id="fid">
  61.                     <label for="e-fname">이름</label>
  62.                     <input type="text" name="fname" id="e-fname" class="form-control" placeholder="이름">
  63.                 </div>
  64.                 <div class="form-group">
  65.                     <label for="e-femail">Email</label>
  66.                     <input type="text" name="femail" id="e-femail" class="form-control" placeholder="Email">
  67.                 </div>
  68.                 <div class="form-group">
  69.                     <label for="e-fphone">전화번호</label>
  70.                     <input type="text" name="fphone" id="e-fphone" class="form-control" placeholder="전화번호">
  71.                 </div>
  72.                 <div class="form-group">
  73.                     <label for="e-fschool">학교</label>
  74.                     <input type="text" name="fschool" id="e-fschool" class="form-control" placeholder="학교">
  75.                 </div>
  76.                 <div class="form-group">
  77.                     <a href="#!" class="btn-update btn btn-success">친구수정</a>
  78.                 </div>
  79.             </form>
  80.         </div>
  81.  
  82.     <script>
  83.         var db;
  84.  
  85.         //db "adbook" open(없으면 새로 만들어 줌, ver 1)
  86.         var request = window.indexedDB.open("adbook",1);
  87.         request.onerror = function(event){
  88.             console.log("DB Open Error");
  89.         };
  90.         request.onsuccess = function(event){
  91.             db = request.result;
  92.             readAll();
  93.         };
  94.         request.onupgradeneeded = function(event){
  95.             var result = event.target.result;
  96.             var objStore = result.createObjectStore(
  97.                 "address",
  98.                 {"keyPath":"id", autoIncrement:true}
  99.                 );
  100.         }
  101.  
  102.         $(".btn-add").on("click",function(){
  103.             $(".add-friend").slideToggle();
  104.         });
  105.  
  106.         $(".btn-save").on("click",function(e){
  107.             e.preventDefault();//링크 이동 방지
  108.             var friend = {};
  109.             friend.fname = $("#fname").val();
  110.             friend.femail = $("#femail").val();
  111.             friend.fphone = $("#fphone").val();
  112.             friend.fschool = $("#fschool").val();
  113.             if( ! friend.fname || ! friend.femail || ! friend.fphone || ! friend.fschool ) {
  114.                 return;
  115.             }
  116.             saveData(friend);
  117.         });
  118.  
  119.         function saveData(data) {
  120.             var trz = db.transaction(["address"],"readwrite");
  121.             var store = trz.objectStore("address");
  122.             var request = store.add(data);
  123.             request.onsuccess = function(event){
  124.                 var id = event.target.result;
  125.                 data.id = id;
  126.                 addList(data);
  127.                 $("#fname").val("");
  128.                 $("#femail").val("");
  129.                 $("#fphone").val("");
  130.                 $("#fschool").val("");
  131.                 $(".add-friend").slideUp();
  132.             };
  133.             request.onerror = function(event){
  134.                 console.log("Error on Save");
  135.             }
  136.         }
  137.  
  138.         function readAll() {
  139.             var trz = db.transaction(["address"]);
  140.             var store = trz.objectStore("address");
  141.             store.openCursor().onsuccess = function(event){
  142.                 var cursor = event.target.result;
  143.                 if( cursor ) {
  144.                     addList(cursor.value);
  145.                     cursor.continue();
  146.                 }
  147.             }
  148.         }
  149.  
  150.         function addList(data) {
  151.             if( ! data ) return;
  152.             var row = "<tr id='friend-" + data.id + "'>";
  153.             row += "<td class='data-id'>" + data.id + "</td>";
  154.             row += "<td class='data-fname'>" + data.fname + "</td>";
  155.             row += "<td class='data-femail'>" + data.femail + "</td>";
  156.             row += "<td class='data-fphone'>" + data.fphone + "</td>";
  157.             row += "<td class='data-fschool'>" + data.fschool + "</td>";
  158.             row += "<td>";
  159.             row += "<a href='" + data.id + "' class='btn-edit btn btn-warning btn-sm'>수정</a>";
  160.             row += " <a href='" + data.id + "' class='btn-delete btn btn-danger btn-sm'>삭제</a>";
  161.             row += "</td>";
  162.             row += "</tr>";
  163.             $("#flist tr:last").after(row);
  164.         }
  165.  
  166.         $("#flist").on("click",".btn-delete",function(e){
  167.             e.preventDefault();
  168.             var id = $(this).attr("href");
  169.             if( ! id ) return;
  170.             deleteRecord(id);
  171.         });
  172.  
  173.         function deleteRecord(id) {
  174.             if( ! id ) return false;
  175.             var id = parseInt(id,10);
  176.             var trz = db.transaction(["address"],"readwrite");
  177.             var objectStore = trz.objectStore("address");
  178.             var request = objectStore.delete(id);
  179.             request.onsuccess = function(event){
  180.                 $("#friend-" + id).remove();
  181.             };
  182.             request.onerror = function(event){
  183.                 alert("삭제실패");
  184.             };
  185.         }
  186.  
  187.     $("#flist").on("click",".btn-edit",function(e){
  188.             e.preventDefault();
  189.             var id = $(this).attr("href");
  190.             if( ! id ) return;
  191.             editRecord(id);
  192.         });    
  193.  
  194.     function editRecord(id){
  195.         if( ! id ) return;
  196.         id = parseInt(id,10);
  197.         var trz = db.transaction(["address"]);
  198.         var objectStore = trz.objectStore("address");
  199.         var request = objectStore.get(id);
  200.         request.onsuccess = function(event){
  201.             var data = request.result;
  202.             if( ! data ) return;
  203.             $("#fid").val(data.id);
  204.             $("#e-fname").val(data.fname);
  205.             $("#e-femail").val(data.femail);
  206.             $("#e-fphone").val(data.fphone);
  207.             $("#e-fschool").val(data.fschool);
  208.             $(".edit-friend").dialog({
  209.                 title: "친구수정",
  210.                 width: 500,
  211.                 height: 500,
  212.                 modal: true
  213.             });
  214.         };
  215.         request.onerror = function(event){
  216.             console.log("read error");
  217.         };
  218.     }
  219.  
  220.     $(".btn-update").on("click", function(){
  221.         var data = {};
  222.         var id = $("#fid").val();
  223.         if( ! id ) return;
  224.         id = parseInt(id, 10);
  225.         data.fname = $("#e-fname").val();
  226.         data.femail = $("#e-femail").val();
  227.         data.fphone = $("#e-fphone").val();
  228.         data.fschool = $("#e-fschool").val();
  229.         if( ! data.fname || ! data.femail || ! data.fphone || ! data.fschool ) {
  230.             alert("필수 입력 사항이 빠졌습니다.");
  231.             return;
  232.         }
  233.         var trz = db.transaction(["address"], "readwrite");
  234.         var objectStore = trz.objectStore("address");
  235.         var request = objectStore.get(id);
  236.         request.onsuccess = function(event){
  237.             var dbdata = event.target.result;
  238.             dbdata.fname = data.fname;
  239.             dbdata.femail = data.femail;
  240.             dbdata.fphone = data.fphone;
  241.             dbdata.fschool = data.fschool;
  242.             var dbupdate = objectStore.put(dbdata);
  243.             dbupdate.onsuccess = function(event){
  244.                 $("#friend-" + id).children("td.data-fname").text(data.fname);
  245.                 $("#friend-" + id).children("td.data-femail").text(data.femail);
  246.                 $("#friend-" + id).children("td.data-fphone").text(data.fphone);
  247.                 $("#friend-" + id).children("td.data-fschool").text(data.fschool);
  248.                 $(".edit-friend").dialog("close");
  249.             };
  250.             dbupdate.onerror = function(event){
  251.                 console.log('데이터 수정 실패');
  252.             };
  253.         };
  254.         request.onerror = function(event){
  255.             console.log('데이터 수정 실패');
  256.         }      
  257.  
  258.     });
  259.  
  260.     </script>
  261. </body>
  262. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement