국비지원학원/HTML,JavaScript,jQ

81일차-JavaScript_회원가입 추가/canvas,storage,JSON

초코맛 2019. 2. 28. 03:55
반응형
<<회원가입 기능 추가>>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회 원 가 입</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/html_prj/common/main_v190130.css"/>
<style type="text/css">
     #joinTitle{font-weight: bold; font-size: 20px;}
     .tdalign{text-align: center}
     table{margin: 0px auto}
     tr{height:25px}
     
     #wrap{width:1007px; margin: 0px auto;}
     #joinHeader{width:1007px; height:195px;
                     background: #FFFFFF url(images/header.png)  no-repeat;}
     .span{color:#FF0000;}
</style>
<script type="text/javascript">
     window.onload=function(){
           //옵션 생성
           //년
           //var b_year=document.getElementById("b_year");
           var obj=document.joinFrm;
           var b_year=obj.b_year;//1.select 얻기
           
           var date=new Date();
           var year_idx=0;
           //20살의 나이를 가진 년도에 selected
           var flag_year=date.getFullYear()-20+1;
           
           for(var i=1950; i<date.getFullYear()+1; i++){
                //2.select의 옵션 생성 Option(보여질값,  value값(넘겨줄값))
                b_year.options[year_idx]=new Option(i,i);
                if(flag_year==i){
                     b_year.selectedIndex=year_idx;
                }//end if;
                year_idx++;
           }//end for
           //b_year.options[50].selected = true;
          //b_year.options[50].setAttribute("selected","selected");
           
           //월 설정 1-12
           var b_month=obj.b_month;
           var month_idx=0;
           for(var i=1; i<13; i++){
                b_month.options[month_idx]=new Option(i,i);
                month_idx++;
           }//end for
           
           //일 설정 1-31
           var b_day=obj.b_day;
           var day_idx=0;
           for(var i=1; i<32; i++){
                b_day.options[day_idx]=new Option(i,i);
                day_idx++;
           }//end for
           
           //////////////////////////////////이벤트  등록/////////////////////////////////////////
          document.getElementById("idDup").addEventListener("click",popupCenter);
          document.getElementById("searchZip").addEventListener("click",popupCenter);
          document.getElementById("daumZip").addEventListener("click",execPostcode);
          document.getElementById("btnJoin").addEventListener("click",nullCheck);
           
          document.getElementById("pass2").addEventListener("blur",chkPass);
           
          document.getElementById("ssn1").addEventListener("keyup",moveSsn2);
          document.getElementById("ssn2").addEventListener("keyup",chkSsn);
           
     }//function-onload
     
     function moveSsn2(){
           //주민번호 앞자리에서 6글자가 입력되면 커서를 ssn2로  이동
/*         if(document.getElementById("ssn1").value.length==6){
                document.joinFrm.ssn2.focus();
           }//end if나나!! */
           var obj=document.joinFrm;
           if(obj.ssn1.value.length==6){
                obj.ssn2.focus();
           }//end if
           
           if(obj.ssn1.value.replace(/[0-9]/g,"")!=""){
                alert("주민번호는 숫자로만 구성됩니다.");
                obj.ssn1.value="";
                obj.ssn1.focus();
                return;
           }//end if
     }//moveSsn2
     
     function chkSsn(){
           //입력한 주민번호의 유효성 검증
           //주민 번호의 끝자리가 7자리인지
           var obj=document.joinFrm;
           if(obj.ssn2.value.length==7){
                //주민 번호 첫번째 자리가 숫자로 구성되어있는지?
                if(obj.ssn1.value.replace(/[0-9]/g,"")!=""){
                     alert("주민번호 첫번쨰 칸자리는 숫자로만  구성됩니다.");
                     obj.ssn1.value="";
                     obj.ssn1.fucus();
                     return;
                }//end if
                
                //주민 번호 두번째 자리가 숫자로 구성되어있는지?
                if(obj.ssn2.value.replace(/[0-9]/g,"")!=""){
                     alert("주민번호는 두번째칸 자리는 숫자로만  구성됩니다.");
                     obj.ssn2.value="";
                     obj.ssn2.fucus();
                     return;
                }//end if
                
                var ssn=obj.ssn1.value+obj.ssn2.value;
                //alert(ssn);
                var flagNum=[2,3,4,5,6,7,8,9,2,3,4,5];
                
                //주민번호의 각자리에 2,3,4,5,6,7,8,9,2,3,4,5 를  곱한 값의 결과를 모두 더해서 변수에 할당
                var temp=0;
                for(var i=0; i<flagNum.length; i++){
                     temp +=ssn.charAt(i)*flagNum[i];
                }//end for
                
                //위에서 계산된 값을 11로 나눈 나머지를 11에서  빼고 그 결과를 10으로 나눈 나머지를 구한다.
                temp=(11-(temp%11))%10;
                //위에서 계산된 결과가 주민번호의 가장마지막  자리와 일치한다면 유효, 그렇지 않다면 무효
                if(temp==ssn.charAt(12)){
                     //alert("유효");
                     //성별 체크
                     var genderFlag=ssn.charAt(6);
                     if(genderFlag%2==0){
                           //여자
                           obj.gender[1].checked=true;
                     }else{
                           obj.gender[0].checked=true;
                     }//end else
                           
                     //생년월일
                     var ssn_year=parseInt(ssn.substring(0,  2));
                     var ssn_month=parseInt(ssn.substring(2,  4));//01->1
                     var ssn_day=parseInt(ssn.substring(4,  6));//01->1
                     if(genderFlag<=2){//1,2=>1900
                           ssn_year=1900+ssn_year;
                     }else if(genderFlag<=4){//=>2000
                           ssn_year=2000+ssn_year;
                     }//end else
                           
                     //생년월일 체크되게 하기
                     var b_flag=false;
                     for(var i=0; i<obj.b_year.length; i++){
                           if(obj.b_year[i].value==ssn_year){
                                obj.b_year[i].selected=true;
                                b_flag=true;
                                break;
                           }//end if
                     }///end for
                     
                     if(!b_flag){//준비된 생년이 없을 때
                           //옵션을 생성하여 추가하고
                          obj.b_year.options[obj.b_year.length]=new  Option(ssn_year,ssn_year);
                           //추가된 옵션을 선택해 준다.
                          obj.b_year[obj.b_year.length-1].selected=true;
                     }//end if
                     
                     //월 설정
                     obj.b_month[ssn_month-1].selected=true;
                     //일 설정
                     obj.b_day[ssn_day-1].selected=true;
                           
                     //나이
                     var date=new Date();
                     obj.age.value=date.getFullYear()-ssn_year+1;
                           
                }else{
                     alert("잘못된 주민 번호 입니다.");
                }//end else
           }//end if
     }//chkSsn
     
     //미혼일때 결혼기념일 체크 안되게
     
     function nullCheck(){
           //필수 입력값 체크
           var obj=document.joinFrm;
           
           if(obj.id.value==""){
                alert("아이디는 필수 입력!!");
                return;
           }//end if
           
           if(obj.pass1.value==""){
                alert("비밀번호는  필수 입력!!");
                obj.pass1.focus();
                return;
           }//end if
           if(obj.pass2.value==""){
                alert("비밀번호 확인은  필수 입력!!");
                obj.pass2.focus();
                return;
           }//end if
           
           if(obj.name.value==""){
                alert("이름은  필수 입력!!");
                obj.name.focus();
                return;
           }//end if
           
           if(obj.ssn1.value==""){
                alert("주민번호  앞칸은 필수 입력!!");
                obj.ssn1.focus();
                return;
           }//end if
           if(obj.ssn2.value==""){
                alert("주민번호 뒷칸은  필수 입력!!");
                obj.ssn2.focus();
                return;
           }//end if
           
          if(obj.zipcode1.value==""||obj.zipcode2.value==""||obj.addr1.value==""){
                alert("주소를 검색해 주세요!!");
                return;
           }//end if
           
           if(obj.addr2.value==""){
                alert("상세주소는  필수 입력!!");
                obj.addr2.focus();
                return;
           }//end if
           
           //입력값이 모두 입력되었으므로 서버로 전송
           obj.submit();//get방식이라 중요정보가 다 주소로  넘어가게된다!-> post로 바뀌어야 한다.
           
     }//nullCheck
     
     function chkPass(){
           //비밀번호가 일치 하는지 체크
           var obj=document.joinFrm;
           if(obj.pass1.value != obj.pass2.value){
                alert("비밀번호가 틀립니다.");
                obj.pass1.value="";
                obj.pass2.value="";
                obj.pass1.focus();
                return;
           }//end if
     }//chkPass
     
     function popupCenter(){
           var width=0;
           var height=0;
           var html="";
           var id=""
           
           if(this.id=="idDup"){
//              alert("아이디 중복확인");
                id="idDup";
                html="id_dup.html";
                width=502;
                height=303;
           }//end if
           if(this.id=="searchZip"){
//              alert("우편번호확인");
                id="searchZip";
                html="search_zip.html";
                width=408;
                height=419;
           }//end if  
           /* if(this.id=="daumZip"){
//              alert("다음");
//postcode.map.daum.net/guide
                id="daumZip";
                html="daum_zip.html";
                width=502;
                height=303;
           }//end if */
          window.open(html,id,"width="+width+",height="+height);           
     }//popupCenter
</script>
<style type="text/css">
</style>
<!-- script를 body에 넣었을때 에러가 발생하면 사용자는  에러메세지를 계속 클릭한 이후 제공하는 서비스를 볼 수 있다.
     script를 head에 넣었다면 에러가 발생하더라도 body는  에러메세지 없이 그대로 제공된다. -->
<script  src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>
<script>
    //본 예제에서는 도로명 주소 표기 방식에 대한 법령에 따라,  내려오는 데이터를 조합하여 올바른 주소를 구성하는 방법을  설명합니다.
    function execPostcode() {
        new daum.Postcode({
            oncomplete: function(data) {
                // 팝업에서 검색결과 항목을 클릭했을때 실행할  코드를 작성하는 부분.
                // 도로명 주소의 노출 규칙에 따라 주소를 표시한다.
                // 내려오는 변수가 값이 없는 경우엔 공백('')값을  가지므로, 이를 참고하여 분기 한다.
                var roadAddr = data.roadAddress; // 도로명 주소  변수
                var extraRoadAddr = ''; // 참고 항목 변수
                // 법정동명이 있을 경우 추가한다. (법정리는 제외)
                // 법정동의 경우 마지막 문자가 "동/로/가"로  끝난다.
                if(data.bname !== '' &&  /[동|로|가]$/g.test(data.bname)){
                    extraRoadAddr += data.bname;
                }
                // 건물명이 있고, 공동주택일 경우 추가한다.
                if(data.buildingName !== '' && data.apartment  === 'Y'){
                   extraRoadAddr += (extraRoadAddr !== '' ? ', '  + data.buildingName : data.buildingName);
                }
                // 표시할 참고항목이 있을 경우, 괄호까지 추가한  최종 문자열을 만든다.
                if(extraRoadAddr !== ''){
                    extraRoadAddr = ' (' + extraRoadAddr + ')';
                }
                // 우편번호와 주소 정보를 해당 필드에 넣는다.
                document.getElementById('zipcode').value =  data.zonecode;
                document.getElementById("roadAddr").value =  roadAddr;
                //document.getElementById("jibunAddr").value =  data.jibunAddress;
                
                // 참고항목 문자열이 있을 경우 해당 필드에 넣는다.
                if(roadAddr !== ''){
                    document.getElementById("extraAddr").value =  extraRoadAddr;
                } else {
                    document.getElementById("extraAddr").value =  '';
                }
/*                 var guideTextBox =  document.getElementById("guide");
                // 사용자가 '선택 안함'을 클릭한 경우, 예상  주소라는 표시를 해준다.
                if(data.autoRoadAddress) {
                    var expRoadAddr = data.autoRoadAddress +  extraRoadAddr;
                    guideTextBox.innerHTML = '(예상 도로명 주소  : ' + expRoadAddr + ')';
                    guideTextBox.style.display = 'block';
                } else if(data.autoJibunAddress) {
                    var expJibunAddr = data.autoJibunAddress;
                    guideTextBox.innerHTML = '(예상 지번 주소 :  ' + expJibunAddr + ')';
                    guideTextBox.style.display = 'block';
                } else {
                    guideTextBox.innerHTML = '';
                    guideTextBox.style.display = 'none';
                } */
            }
        }).open();
    }
</script>
</head>
<body>
<div id="wrap">
<div id="joinHeader"></div>
<div id="joinContent">
     <form action="member.jsp" name="joinFrm">
           <table>
                <tr>
                     <td class="tdalign" colspan="2"><span  id="joinTitle">회원가입</span></td>
                </tr>
                
                <tr>
                     <td><span class="span">*</span>아이디</td>
                     <td>
                           <input type="text" class="inputBox"  name="id" readonly="readonly" style="width:100px">
                           <button type="button" class="btn"  id="idDup">중복확인</button>
                     </td>
                </tr>
                
                <tr>
                     <td><span  class="span">*</span>비밀번호</td>
                     <td><input type="password"  class="inputBox" name="pass1" style="width:120px"></td>
                </tr>
                
                <tr>
                     <td><span class="span">*</span>비밀번호  확인</td>
                     <td><input type="password"  class="inputBox" id="pass2" name="pass2"  style="width:120px"></td>
                </tr>
                
                <tr>
                     <td><span class="span">*</span>이름</td>
                     <td><input type="text" class="inputBox"  name="name" style="width:120px"></td>
                </tr>
                
                <tr>
                     <td><span  class="span">*</span>주민번호</td>
                     <td><input type="text" class="inputBox"  name="ssn1" id="ssn1" style="width:60px" maxlength="6">
                           <label> - </label>
                           <input type="password"  class="inputBox" name="ssn2" id="ssn2" style="width:70px"  maxlength="7"></td>
                </tr>
                
                <tr>
                     <td>&nbsp;성별</td>
                     <td><input type="radio" value="남자"  name="gender" name="pass">남자
                           <input type="radio" value="여자"  name="gender">여자</td>
                </tr>
                
                <tr>
                     <td>&nbsp;생년월일</td>
                     <td>
                           <select name="b_year"  class="inputBox">
                           </select>
                           <label>년</label>                          
                           
                           <select name="b_month"  class="inputBox">
                           </select>
                           <label>월</label>    
                           
                           <select name="b_day"  class="inputBox">
                           </select>                  
                           <label>일</label>                          
                     </td>
                </tr>
                
                <tr>
                     <td>&nbsp;나이</td>
                     <td><input type="text" name="age"  class="inputBox" style="width:30px"></td>
                </tr>
                
                <tr>
                     <td>&nbsp;관심언어</td>
                     <td>
                     <input type="checkbox" value="Java"  name="interestlang">Java
                     <input type="checkbox" value="C/C++"  name="interestlang">C/C++
                     <input type="checkbox" value="Python"  name="interestlang">Python
                     <input type="checkbox" value="VB"  name="interestlang">VB
                     
                     <input type="checkbox" value="JSP"  name="interestlang">JSP
                     <input type="checkbox" value="Servlet"  name="interestlang">Servlet
                     <input type="checkbox" value="ASP"  name="interestlang">ASP
                     <input type="checkbox" value="php"  name="interestlang">php
                     </td>
                </tr>
                
                <tr>
                     <td>&nbsp;결혼여부</td>
                     <td><input type="radio" value="미혼"  name="marrigeFlag" checked="checked">미혼
                           <input type="radio" value="기혼"  name="marrigeFlag">기혼</td>
                </tr>
                
                <tr>
                     <td>&nbsp;결혼기념일</td>
                     <td><input type="text" maxlength="4"  name="m_year" class="inputBox" style="width:40px">년&nbsp;
                     <input type="text"  maxlength="2"  name="m_month" class="inputBox" style="width:20px">월&nbsp;
                     <input type="text"  maxlength="2"  name="m_day" class="inputBox" style="width:20px">일</td>
                </tr>
                
                <tr>
                     <td><span  class="span">*</span>우편번호</td>
                     <td><input type="text" readonly="readonly"  name="zipcode1" class="inputBox" style="width:30px">
                           <label> - </label>
                           <input type="text"  readonly="readonly" name="zipcode2" class="inputBox"  style="width:30px">
                           변경된<input type="text"  readonly="readonly" name="zipcode" id="zipcode" class="inputBox"  style="width:50px">
                           &nbsp;<button type="button"  class="btn" id="searchZip">우편번호검색</button>
                           &nbsp;<button type="button"  class="btn" id="daumZip">다음우편번호검색</button></td>
                </tr>
                <tr>
                     <td><span class="span">*</span>주소</td>
                     <td>
                     <input type="text" readonly="readonly"  name="addr1" id="roadAddr" class="inputBox" style="width:200px">
                     참고 주소 : <input type="text"  id="extraAddr" class="inputBox"/>
                     </td>
                </tr>
                <tr >
                     <td><span  class="span">*</span>상세주소</td>
                     <td><input type="text" class="inputBox"  name="addr2" style="width:200px"></td>
                </tr>
                
                <tr valign="middle">
                     <td>&nbsp;가입인사</td>
                     <td><textarea name="greetings"  class="inputBox" style="width:250px;  height:100px"></textarea></td>
                </tr>
                <tr>
                     <td colspan="2" class="tdalign">
                     <button type="button" class="btn"  id="btnJoin" onclick="">가입</button>&nbsp;
                     <button type="reset"  class="btn">초기화</button>
                     </td>
                </tr>
                <tr>
                     <td colspan="2"><span class="span">*는 필수  입력 사항입니다.</span></td>
                </tr>
           </table>
     </form>
     </div>
</div>
</body>
</html>



canvas/storage=>HTML5
*canvas
  • 도형을 그리거나 이미지를 다룰때 사용.
  • 2D그래픽을 지원
  • 플러그인(플래쉬?)같은게 없이도 이미지를 보일수 있다는게 장점(맥의 사파리...)
  • 사용법)
    • 1.태그 작성(모든 브라우저가 되지 않을 수도)
      • <canvas id="id 값" width="" height=""></canvas>
      • var can=document.getElememtId("id 값");
    • 3.2d그래픽을 그리는 객체
      • var ctx=can.getContext("2d");
      • =>ctx로 이미지, 도형,그림,글자를 쓰게 됨
      • ex)ctx.fillRect(x,y,w,h);//사각형 그리기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/html_prj/common/main_v190130.css"/>
<style type="text/css">
     #can{border:1px solid #333; }
</style>
<script type="text/javascript">
     window.onload=function(){
          document.getElementById("rect").addEventListener("click",drawRect);
          document.getElementById("img").addEventListener("click",drawImg);
          document.getElementById("line").addEventListener("click",drawLine);
     }//function
     
     function drawRect(){
           //1.canvas 얻기
           var can=document.getElementById("can");
           //2.2d그래픽을 그릴 수 있는 객체
           var ctx=can.getContext("2d");
           
           //초기화 : 그래픽 객체를 초기화->위에 덧입혀 지기때문에  초기화를 하지 않으면 진해진다.
           ctx.clearRect(0,0,can.width,can.height);
           //4.색변경 :  fillStyle="RGB(R,G,B)"|"rgba(R,G,B,투명도)"
           ctx.fillStyle="rgb(255,0,0)";//값 0~255
           //3.지정한 좌표에 사각형 그리기 : fillRect(x,y,w,h);
           ctx.fillRect(10,10,80,40);
           
           ctx.fillStyle="rgba(255,0,0,0.5)";//투명도 : 0.0~1
           ctx.fillRect(40,40,80,40);
     }//drawRect
     
     function drawImg(){
           //1.canvas얻기
           var can=document.getElementById("can");
           //2.2d 그래픽 객체 얻기
           var ctx=can.getContext("2d");
           
           //초기화->그려져있던걸 지우고 그린다.
           ctx.clearRect(0,0,can.width,can.height);
           
           //3.이미지 객체 생성
           var img=new Image();
           //4.이미지 객체의 경로 설정 : img.src="이미지 경로";
           img.src="../common/images/img.png";
           //5.이미지를 그린다. : ctx.drawImage(이미지 객체,x,y);
           //ctx.drawImage(img,100,50);//이미지의 크기대로  그려진다.
           //이미지의 크기를 변경하여 그릴 수 있다.  ctx.drawImage(이미지 객체,x,y,w,h) : 자원을 너무 많이 사용하게되어  잘 사용하지 않는다.
           ctx.drawImage(img,30,30,100,100);
           
     }//drawImg
     
     function drawLine(){
           //1.canvas얻기
           var can=document.getElementById("can");
           //2.2d 그래픽 객체 얻기
           var ctx=can.getContext("2d");
           
           //초기화
           ctx.clearRect(0,0,can.width,can.height);
           
           //3.선긋기 시작 함수 호출 : ctx.beginPath()
           ctx.beginPath();
           //3-2시작 좌표 : ctx.moveTo(x1,y1);
           ctx.moveTo(25,50);//시작 좌표 재설정
           //끝 좌표 : ctx.lineTo(x1,y1);        
           ctx.lineTo(150,50);//끝 좌표를 재설정하여 선을 그린다.
           ctx.lineTo(25,150);//위의 lineTo에서 설정된 좌표를  시작점으로 선을 그린다.
           
           ctx.moveTo(25,50);//좌표가 재설정되고
           ctx.lineTo(25,150);//재설정된 좌표에서 끝좌표를  설정하여 선을 그린다.
           
           //3-3선긋기
           ctx.stroke();
           //3.선긋기 끝 함수 호출 : ctx.closePath()
           
           
     }//drawLine
</script>
</head>
<body>
     <canvas id="can" width="500" height="500"></canvas>
     <br/>
     <input type="button" value="사각형" class="btn"  id="rect"/>
     <input type="button" value="이미지" class="btn"  id="img"/>
     <input type="button" value="선" class="btn" id="line"/>
</body>
</html>

 
*storage
  • HTML5에서 지원되는 저장객체
  • 접속자의 정보를 접속자 브라우저에 저장하는 객체
  • (다음번에 들어왔을때에도 쓸수 있다.)
  • 비연결성인 웹에서 접속자의 정보를 저장할 수 있다.
    • =>비연결성:접속자의 요청이 있을때 서버와 연결하고, 요청한 데이터가 응답이 되면 연결이 끊어지는 동작(필요할 때에만 연결)
      • 비연결성 특징) 서버의 자원을 절약할 수 있다.(저사양의 서버로도 많은 접속자를 처리할 수 있다.) //부하가 덜걸린다..
        • +클라이언트의 상태를 알 수 없다.
    • 이 비연결성의 문제점을 해결하기 위해 session, cookie를 제공 하게 된다.
      • session : 접속자의 정보를 서버측 메모리에 저장
      • cookie : 접속자의 정보를 접속자 HDD에 파일로 저장.=>문자열만 저장가능, File생성(4kb-한정)
  • 이 cookie기술을 대체하기 위한 기술!
  • SessionStorage, localStorage 두가지 제공
    • =>브라우저의 저장소에 저장되어 cookie의 단점 보완(약 5Mbyte까지 저장)
  • 이름과 값의 쌍(key value pare:kvp)으로 저장

  • SessionStorage
    • Session : 컴퓨터끼리의 연결 상태(호단위(컴퓨터 마다/끼리) 연결)
    • 접속자의 정보가 서버에 연결되어 있을 때에만 유지된다.
  • localStorage
    • 접속자의 정보가 서버와 연결이 끊어져도 유지된다.

  • 윈도우 객체의 자식으로 제공된다.
  • 사용법)
    • Storage객체 얻기
      • var 변수명=window.localStorage;
      •                                .sessionStorage;
    • 값 설정
      • 변수명.setItem("이름","값");   //서버가 다르면 사용할 수 없다.
    • 값 얻기
      • =변수명.getItem("이름");
    • 값 삭제
      • 변수명.removeItem("이름");
    • 모두 삭제
      • 변수명.clear();

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/html_prj/common/main_v190130.css"/>
<style type="text/css">
     #output{height: 80px; width: 500px; border:1px solid #333;  }
</style>
<script type="text/javascript">
     window.onload=function(){
          document.getElementById("s_set").addEventListener("click",sSet);
          document.getElementById("s_get").addEventListener("click",sGet);
          document.getElementById("s_remove").addEventListener("click",sRemove);
          document.getElementById("l_set").addEventListener("click",lSet);
          document.getElementById("l_get").addEventListener("click",lGet);
          document.getElementById("l_remove").addEventListener("click",lRemove);
     }//function
     function sSet(){
           //세션 스토리지에 값 설정
          window.sessionStorage.setItem("name","노진경");//문자열(String)
          window.sessionStorage.setItem("age",20);//숫자(number-실수,정수)
           window.sessionStorage.setItem("flag",true);//불린
     }//sSet
     function sGet(){
           var divNode=document.getElementById("output");
           var output="<ul>";
           //세션 스토리지에 값을 얻어와서 div에 출력
           var ses=window.sessionStorage;
           var name=ses.getItem("name");
           var age=ses.getItem("age");
           var flag=ses.getItem("flag");
           
           output+="<li>이름 : "+name+"</li>";
           output+="<li>나이 : "+age+"</li>";
           output+="<li>flag : "+flag+"</li>";
           
           divNode.innerHTML=output;//동적으로 생성해 넣음?
     }//sGet
     function sRemove(){
           //세션 스토리지의 값 삭제
           /* window.sessionStorage.removeItem("name");
           window.sessionStorage.removeItem("age");
           window.sessionStorage.removeItem("flag"); */
           sessionStorage.clear();//모든값을 한번에 지울 수 있다.
     }//sRemove
     function lSet(){
           //로컬 스토리지에 값 설정
          window.localStorage.setItem("name","김희철");//문자열(String)
          window.localStorage.setItem("age",25);//숫자(number-실수,정수)
           window.localStorage.setItem("flag",true);//불린
           window.localStorage.setItem("addr","서울시 동작동");
     }//lSet
     function lGet(){
           var divNode=document.getElementById("output");
           var output="<ul>";
           //local 스토리지에 값을 얻어와서 div에 출력
           var loc=window.localStorage;
           var name=loc.getItem("name");
           var age=loc.getItem("age");
           var flag=loc.getItem("flag");
           var addr=loc.getItem("addr");
           
           output+="<li>이름 : "+name+"</li>";
           output+="<li>나이 : "+age+"</li>";
           output+="<li>flag : "+flag+"</li>";
           output+="<li>주소 : "+addr+"</li>";
           divNode.innerHTML=output;
     }//lGet
     function lRemove(){
           //로컬스토리지의 값 삭제
           localStorage.removeItem("name");
           localStorage.removeItem("age");
           localStorage.removeItem("flag");
           localStorage.removeItem("addr");
           
     }//lRemove
</script>
</head>
<body>
<div id="output"></div>
<div>
     <input type="button" value="SessionStorage값 설정"  class="btn" id="s_set" />
     <input type="button" value="SessionStorage값 얻기"  class="btn" id="s_get" />
     <input type="button" value="SessionStorage값 삭제"  class="btn" id="s_remove" />
     
     <input type="button" value="LocalStorage값 설정"  class="btn" id="l_set" />
     <input type="button" value="LocalStorage값 얻기"  class="btn" id="l_get" />
     <input type="button" value="LocalStorage값 삭제"  class="btn" id="l_remove" />
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/html_prj/common/main_v190130.css"/>
<style type="text/css">
</style>
<script type="text/javascript">
     window.onload=function(){
          document.getElementById("btn").addEventListener("click",setData);
     }//function
     
     function setData(){
           //사용자가 입력한 값을 계속해서 쓰기 위해 로컬스토리지  설정
           var obj=document.frm;
           
           localStorage.setItem("name",obj.name.value);
           
           var img="";
           for(var i=0; i<obj.img.length; i++){
                if(obj.img[i].checked){
                     img=obj.img[i].value;
                }//end if
           }//end for
           
           localStorage.setItem("img",img);
           
           alert("설정 되었습니다.");
           
     }//setData
</script>
</head>
<body>
<form name="frm">
     <label>이름</label><input type="text" name="name"  class="inputBox"/><br/>
     <label>이미지 선택</label>
     <table>
     <tr>
           <td><input type="radio" value="img.png" name="img"  checked="checked"/>김</td>
           <td><img src="../common/images/img.png"  width="80"/></td>
     </tr>
     <tr>
           <td><input type="radio" value="img1_1.png"  name="img"/>정</td>
           <td><img src="../common/images/img1_1.png"  width="80"/></td>
     </tr>
     <tr>
           <td><input type="radio" value="img2.jpg"  name="img"/>이</td>
           <td><img src="../common/images/img2.jpg"  width="80"/></td>
     </tr>
     </table>
     
     <input type="button" value="입력" id="btn" class="btn"/>
     <a href="use_storage1.html">페이지 이동</a>
</form>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/html_prj/common/main_v190130.css"/>
<style type="text/css">
</style>
<script type="text/javascript">
     window.onload= function(){
           //로컬스토리지의 값 얻기
           var name=localStorage.getItem("name");
           var img=localStorage.getItem("img");
           
           if(name==null){
                alert("저장된 정보가 없습니다.");
                location.href="use_storage.html";
           }//end if
           
           var msg="";
           if(img=="img.png"){
                msg="무엇인가 고민하고있는";
           }//end if
           if(img=="img1_1.png"){
                msg="어떤 춤을 춰야할지 고민하는)";
           }//end if
           if(img=="img2.jpg"){
                msg="그날의 피로는 그날";
           }//end if
           
          document.getElementById("img").src="../common/images/"+img;
          document.getElementById("name").innerHTML="<strong>"+name+"</strong>";
          document.getElementById("spec").innerHTML="<strong>"+msg+"</strong>";
           
     }//function
</script>
</head>
<body>
<table border="1">
     <tr>
           <td rowspan="3"><img id="img" height="80"/></td>
           <td>라벨영역</td><td>데이터영역</td>
     </tr>
     <tr>
           <td>이름</td><td><span id="name"></span></td>
     </tr>
     <tr>
           <td>특징</td><td><span id="spec"></span></td>
     </tr>
</table>
</body>
</html>




*JSON(JavaScript Object Notation)
  • 자바스트립트에서 값을 저장하기 위해 사용하는 데이터형 (이 기종 언어간에 값을 주고받는용도로 많이 사용한다)
  • 다양한 데이터를 저장할 수 있다(number, String, boolean, json)
  • 간단한 문법으로 사용할 수 있다.
  • JSONObject, JSONArray 두가지 형태로 사용할 수 있다.
  • eval 함수를 사용하여 객체를 만들고 사용한다(문자열->객체)
  • 이름과 값의 쌍으로 되어있고 이름으로 값을 조회할 수 있다.
  • 문법)
    • {이름 : 값}//JSON object(만들때에는 문자열로)
    • //이름은 '로 감싸고, 형에 따라 '또는 "를 직접사용한다.
    • ex)
      • //1.JSONObject형태의 문자열 생성
      • var text="{'name':'김정윤','age':20,'bool':true}";//지금은 json object형태를 가진 문자열
      • //2.eval함수로 문자열을 JSONObject 객체로 생성
      • var json.obj=eval("("+text+")");//괄호를 넣지 않으면 만들어지지 않는다.
      • //3.이름으로 값을 얻는다.    : 객체명.이름 
      • json_obj.name, json.obj.age, json.obj.bool 로 얻을 수 있다.(map 이랑 비슷)//간편하게 쓸수 있어 많이 쓴다. 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/html_prj/common/main_v190130.css"/>
<style type="text/css">
     #output{height: 80px; width: 500px; overflow: auto;  border:1px solid #333; }
     /* overflow:넘치면 스크롤바 생성 */
</style>
<script type="text/javascript">
     window.onload=function(){
          document.getElementById("btn").addEventListener("click",useJson);
     }//function
     
     function useJson(){
           //JSON : JavaScript Object Notation
           //1.JSONObject 형태의 문자열을 생성
           var data="{'name':'김','age':20,'job':'뛰어난  자바개발자','flag':true,'pubDate':'2019-02-19'}";
           //alert(data);//지금은 그대로 출력
           //2.eval함수를 사용하여 JSONObject객체를 생성한다.
           var json_obj=eval("("+data+")");           
           //alert(json_obj.name+"/"+json_obj.age);
           //3.값 얻기
           var output=document.getElementById("output");
           output.innerHTML="이름 :"+json_obj.name+"<br/>나이  :"+json_obj.age+"<br/>job :"+json_obj.job+
                                "<br/>flag  :"+json_obj.flag+"<br/>생성일 :"+json_obj.pubDate;
     }//useJson
</script>
</head>
<body>
     <div id="output"></div>
     <input type="button" value="JSONObject 사용" class="btn"  id="btn"/>
</body>
</html>

 

반응형