JavaScript

JavaScript 기본기 익히기 (3) : html에서 값 가져오기, form 값 가져오기,객체 다루기

TerianP 2022. 5. 2.
728x90

1. html 문서에서 값 가져오기 : document

  • html 문서에서 값을 가져오기 위해서는 document 객체의 get 함수를 이용한다.
  • 대표적으로 아래 함수들을 사용하는데 특히 html 의 id, class, name 등을 이용해서 해당 태그 내 값을 가져온다.
    • document.getElementById();
    • document.getElementsByClassName()
    • document.getElementsByName()
    • document.getElementsByTagName()
    • document.getElementsByTagName()
  • document get 함수를 통해서 가져오는 값들은 모두 ‘객체’ 이다. 이 때문에 객체의 값을 다시 가져오기 위해서는 value 를 사용해야한다.
  • console.dir(객체) 를 사용하면 해당 객체에서 사용 할 수 있는 변수들을 확인 할 수 있다.
<html>
<head>
    <script>
        function printGuGuDan(){
            // document.getElementById("dan") dan 이라는 id 가 들어있는 html 태그 객체를 가져옴
            console.dir(document.getElementById("dan"));
            // 객체 내 namespaceURL 이라는 변수의  값을 가져옴
            console.log(document.getElementById("dan").namespaceURI);

            // 객체 내 value 변수의 값을 가져옴
            var dan = document.getElementById("dan").value;

            console.log("dan : "+dan)
            // console.log("출력");
            for(var i=1; i<10; i++){
                console.log(dan+" * "+i+" : "+dan*i);
            }

        }
    </script>
</head>
<body>
    <input type="text" name="" id="dan">
    <input type="button" value="전송" onclick="printGuGuDan()">
</body>
</html>

1) 사칙연산

<html>
<head>
    <script>
        function cal(){
            // console.log(document.getElementById("cal").value);

            if(document.getElementById("cal").value == '+'){
            // 두 개의 값 가져오기
            var num1 = document.getElementById("txt1").value;
            var num2 = document.getElementById("txt2").value;
            
            // 형변환하여 result 에 담기
            var result = parseInt(num1)+parseInt(num2);

            // id 가 result 인 곳에 값 담기
            document.getElementById("result").value = result;

            }else if(document.getElementById("cal").value == '-'){

                var num1 = document.getElementById("txt1").value;
                var num2 = document.getElementById("txt2").value;
            
                // 형변환하여 result 에 담기
                var result = parseInt(num1)-parseInt(num2);

                // id 가 result 인 곳에 값 담기
                document.getElementById("result").value = result;

            }else if(document.getElementById("cal").value == '*'){

                var num1 = document.getElementById("txt1").value;
                var num2 = document.getElementById("txt2").value;
            
                // 형변환하여 result 에 담기
                var result = parseInt(num1)*parseInt(num2);

                // id 가 result 인 곳에 값 담기
                document.getElementById("result").value = result;
            }else if(document.getElementById("cal").value == '/'){
                var num1 = document.getElementById("txt1").value;
                var num2 = document.getElementById("txt2").value;
                
                // 형변환하여 result 에 담기
                var result = parseInt(num1)/parseInt(num2);

                // id 가 result 인 곳에 값 담기
                document.getElementById("result").value = result;
            }
        }
	// eval() 함수 이용하기
			function cal2(){
            var num1 = document.getElementById("txt1").value;
            var num2 = document.getElementById("txt2").value;
            var oper = document.getElementById("cal").value;
            // var result = document.getElementById("result").value;

            // exp 에 들어간 문자열이
            var exp = num1+oper+num2;
            // eval 을 통해 하나의 식으로 변환 계산되어 data 에 저장됨
            var data = eval(exp);
            
            document.getElementById("result").value = data;
            
        }
    </script>
</head>
<body>
    <input type="text" name="" id="txt1" size="5">

    <input type="text" nane="" id="cal" size="5">

    <input type="text" name="" id="txt2" size="5">

    <input type="button" value="=" onclick="cal()">
    <input type="text" name="" id="result">

    
</body>
</html>

2. href 다루기

  • 자바스크립트에서 href 를 다루기 위해서는 location 객체를 사용한다.
  • 이때 location.href 는 ‘현재 위치’를 나타낸다고 생각하면 편하다.
    • 즉 location.href 를 고치면 해당 스크립트가 실행되었을 때 내가 수정한 위치로 이동하게 된다.
        function goGoogle(){
            // 버튼 클릭 시 웹페이지 이동
            location.href="<<a href=http://www.google.com>http://www.google.com</a>>";
        }

        function goNaver(){
            location.href="<<a href=http://www.naver.com>http://www.naver.com</a>>";
        }
     

3. DIV 다루기

  • JS 로 DIV를 다뤄서 DIV 내 글자를 출력하거나 DIV 내 값을 가져오는 등 다양한 기능이 가능하다
<script>
        function showDiv(){
            // console.log("하하하");
            var div = document.getElementById("box");
            console.dir(div);

            // DIV 태그 내 값 중에서 innerHTML 과 innerText 가 있다.
            // innerHTML 은 말 그대로 HTML 로서 들어가며 HTML 태그가 동작
            
            div.innerHTML = "<h1><center>innerHTML<center></h1>";

            // TEXT 는 HTML 로서 들어가지 않고 TEXT 자체로만 들어가고, 태그가 동작 X
            // div.innerText = "<h1>innerText</h1>";
        }
    </script>

 

 

공부한 것을 활용해서 LOTTE 만들기!!

- js 의 배열+정렬을 사용한다. 그림은 이전에 JAVA 에서 사용하던것 그대로!

<html>
<head>
    <style>
        img{
            margin-top: 100px;
            width: 150px;
            height: 150px;
        }
        #roll{
            margin-top: 100px;
            width: 150px;
            height: 100px;

            position: relative;
            /* right: -350px; */
            font-weight: bold;
        }
    </style>
    <script>
        function rollLotte(){
            var num = []; // 배열 선언

            for(var i=0; i<6; i++){
                var no = (Math.floor(Math.random()*45)+1);

                
                
            // 중복검사
            // num 안의 요소를 하나씩 꺼내와서
            // 내가 새로 생성한 letto 와 비교 후
            // 동일하면 새로 lotte 뽑기
                for(var j in num){
                    if(num[j] == no){
                        no = (Math.floor(Math.random()*45)+1);
                    }
                }
                num.push(no);
            }

            // JS 용 정렬
            // 오름차순 정렬
            num.sort(function(a,b){
                return a-b;
            });

            // console.log(num[1]);

            for(var i=0; i<6; i++){
                // console.log(ran);
                var photo = document.getElementById("lotte"+(i+1));
                photo.src = "../lotte/ball"+num[i]+".png";
            }

            
        }
    </script>
</head>
<body>
    <img src="../lotte/q.jpg" id="lotte1" alt="lotte">
    <img src="../lotte/q.jpg" id="lotte2" alt="lotte">
    <img src="../lotte/q.jpg" id="lotte3" alt="lotte">
    <img src="../lotte/q.jpg" id="lotte4" alt="lotte">
    <img src="../lotte/q.jpg" id="lotte5" alt="lotte">
    <img src="../lotte/q.jpg" id="lotte6" alt="lotte">

    <input type="button" id="roll" value="Big Chance" onclick="rollLotte()">

</body>
</html>

4. Form 다루기

  • 자바 스크립트를 사용하여 document 내 값들을 가져올 수 있는데 이러한 방법은 총 2가지

1) 배열을 통해 form 값 가져오기

<html>
<head>
    <script>
        function checkForm(check){
            console.dir(check);
            // 자바 스크립트를 이용해서 fomr 안에 있는 내용을 가져 올 수 있다.
            // 이렇게 가져오는 것은 배열을 이용해서 가져오는 방식
            // 즉 form 안에 있는 내용은 일종의 배열로 취급한다.
            // 순서는 당연히 form 의 순서에 따른다
            var id = check.form[0];
            var pw = check.form[1];
            var pwConfirm = check.form[2];
            var email = check.form[3];

            // 유효성 검사
            // return ; 을 사용해야만 유효성 검사 후 
            // 검사에서 실패(누락 확인)되면 당므으로 넘어가는것이 아니라 중간에서 컷!
            if(id.value == ''){
                alert("아이디를 입력하세요");
                id.focus();
                return ;
            }else if(pw.value == ''){
                alert("패스워드를 입력하세요");
                pw.focus();
                return ;

            }else if(pwConfirm.value == ''){
                alert("패스워드 확인을 입력하세요");
                pwConfirm.focus();
                return ;

            }else if(email.value == ''){
                alert("이메일을 입력하세요");
                email.focus();
                return ;

            }
            
            // 비밀번호 확인
            else if(pw.value != pwConfirm.value){
                alert("비밀번호가 동일하지 않습니다");
                pw.value = '';
                pwConfirm.value = "";
                pw.focus();
                return ;

            }else if(pw.value.length < 6){
                alert("패스워드는 최소 6자 이상이여야 합니다");
                pw.value = '';
                pwConfirm.value = "";
                pw.focus();
                return ;

            }

            // 이메일 검사
            // indexOf 사용하여 문자 확인 시 잇다면 해당 위치 번호를 return
            // 없으면 -1 return
            else if(email.value.indexOf('@') == -1){
                alert("이메일 주소가 올바르지 않습니다");
                email.value = "";
                return ;

            }

            // get_post html 에 전달
            check.form.action="get_post.html";

            // method
            check.form.method="post";
            
            // 제출
            check.form.submit();

        }
    </script>
</head>
<body>
    <form action="" method="get">

        <table>
            <tr>
                <td>아이디</td>
                <td><input type="text" name="userid"></td>
            </tr>
            <tr>
                <td>비밀번호</td>
                <td><input type=text" name="userpw"></td>
            </tr>
            <tr>
                <td>비밀번호 확인</td>
                <td><input type="text" name="userpwConfirm"</td>
            </tr>
            <tr>
                <td>이메일</td>
                <td><input type="text" name="email"></td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="button" value="submit" onclick="checkForm(this)">
                    <input type="reset" value="reset">
                </td>
            </tr>
        </table>
    </form>

</body>
</html>

5. 객체 다루기

1) 객체 선언과 사용

  • JS 에서 객체의 선언은 var 변수명 = {} 으로 객체를 선언 할 수 있다.
    • 이후 객체변수명.전역변수명 을 사용해서 변수와 값을 초기화 가능하다.
    • 혹은 JSON 방식을 사용해서 초기화도 가능하다
  • 자기자신을 가르키는 this 를 사용가능하다
				// 객체 선언 : var 변수명 = {}
        var person = {};

        person.name = "홍길동";
        person.age = 20;
        console.log(person.name);
        console.dir(person);

				// JSON 방식으로 초기화
        var person2 = {
            name : "엘사",
            age : 15,
            gender : "woman",
            job : "Queen"
        }

2) let 변수명 = new 객체명();

<html>
<head>
    <script>
        function getTime(){
            let time = new Date();
            console.log(time);

            // 날짜 시간은 date 객체 사용
            var year = time.getYear();
            console.log(year);

            var year2 = time.getFullYear();
            console.log(year2);

            var month = time.getMonth();
            console.log(month);

            var now = time.getFullYear()+" 년 "+ (time.getMonth()+1)+" 월 "+ time.getDate()+" 일 "
            + time.getHours()+" : "+ time.getMinutes(0) + " : "+ time.getSeconds();

            console.log(now);
            
            document.getElementById("time").value = now;
        }
    </script>
    <style>
        input#time{
            width: 200px;
        }
    </style>
</head>
<body>
    <input type="text" id="time">
    <input type="button" value="현재 시간은??" onclick="getTime()">
</body>
</html>

 

3) 시간 출력하기 - 특정시간이 지난후

  • 시간을 가져오는 Date 클래스를 사용
  • window.setTimeout 함수는 특정한 시간(1000ms, 1초) 후에 실행되는 함수로 showNowTime 을 실행했을 때 div 영역에 현재 시간을 찍음
  • 이후 windowsetTimeout(showNowTime, 1000) 을 확인하여 showNowTime을 (1000ms)1초 마다 호출함 ⇒ 즉 1초가 지날 때 마다 showNowTime 을 호출하여 출력함
<html>
<head>
    <script>

        // window.setTimeout 함수는 특정한 시간(1000ms, 1초) 후에 실행되는 함수
        // 즉 showNowTime 을 실행했을 때 div 영역에 현재 시간을 찍음
        // -> 이후 windowsetTimeout(showNowTime, 1000) 을 확인하여 showNowTime을 (1000ms)1초 마다 호출함
        // 즉 1초마다 showNowTime 을 호출하여 출력함
        function showNowTime(){
            let time = new Date();

            var now = time.getFullYear()+" 년 "+ (time.getMonth()+1)+" 월 "+ time.getDate()+" 일 "
            + time.getHours()+" : "+ time.getMinutes(0) + " : "+ time.getSeconds();

            // console.log(now);
            
            var div = document.getElementById("box1");
            div.innerHTML = "<h1>"+now+"</h1>";

            // window 내장객체
            // window.setTimeout(함수명, 시간) : 해당 함수를 특정한 시간이 지난 후에 실행됨
            window.setTimeout(showNowTime, 1000);
        }

        
    </script>
</head>
<!-- onload 는 body 태그가 로딩되면 실행 -->
<body onload="showNowTime()">
    <div id="box1"></div>
    <input type="button" value="현재 시간">
</body>
</html>

4) 함수를 특정시간마다 반복 실행

  • window.setInterval 을 사용하면 특정한 시간마다 반복하여 내가 지정한 함수를 실행함
  • setTimeout 과 마찬가지로 매개변수로 함수명, 시간을 받는다.
  • clearInterval 을 사용하면 해당 Interval 을 종료시킬 수 있다.

        
        var interval; // 반복실행하는 함수를 특정하기 위한 변수

        // 페이지 로딩시 실행
        $(function(){
            // id = btn1 클릭시 실행
            $("#btn1").on("click", function(){
                interval = window.setInterval(showPoster, 1000);
            })

            // id = btn2 클릯 ㅣ실행
            $("#btn2").on("click", function(){
                clearInterval(interval);
            })
        });

        // 랜덤 값 생성 -> 랜덤값을 이용해서 image 위치 특정 -> attr 사용해서 src 변경
        function showPoster(){
            var ran = parseInt(Math.random()*8+1);
            var src = "../images/movie_image_"+ran+".jpg";
                
            $("img").attr("src", src);
        }
    

6. 함수의 활용

  • JS 에서는 함수조차 객체로 사용가능함
    • 예를 들어 객체의 값을 정의할 때 value 부분에 익명 함수를 사용해서 값을 넣어줄 수 있음
  • 익명함수로 들어간 부분은 해당 속성명을 함수명으로서 기능함
    • 즉 결과를 얻기 위해서는 함수명(), 익명함수의 매개변수로서 사용하기 위해서는 함수명 만!!
// 아래 함수는 객체 obj 를 받아서 obj 안에 있는 age 값을 검사 후 
        // result 값에 따라 출력
        function isAdult(obj)
        {
            var  result ="";

            if(obj.age > 18)
            {
                result = "성인";
            }else{
                result = "미성년";
            }

            console.log(obj.name+" 은"+"result "+"입니다");
        }

				// 객체는 속성+함수 모두를 갖을 수 있음
        // 따라서 함수를 갖을 수 있음
         // 아래처럼 익명 함수 사용 가능
        var p2 = 
        {
            name : "둘리",
            age : 10,
            gender : "남",

            // 요소로 함수를 갖을 수 있음
            isAdult : function(){
                var result = "";
                if(this.age > 18){
                    result = "성인"
                }else{
                    result = "미성년"
                }

                return result;
            }

        }
        console.log(p2.isAdult());
<script>
        // JS 의 생성자는 java와 동일하게 함수의 첫글자가 대문자
        function Person(name, age, gender, job)
        {
            this.name = name;
            this.age = age;
            this.gender = gender;
            this.job = job;

            // 익명함수
            // isAdult가 하나의 함수명으로서 넣어짐. 따라서 결과를 얻기 위해서는 isAdult() 를 사용함
            // 왜냐하면 isAdult 는 함수명이고, isAdult() 를 해서 결과를 reuturn 받기 때문
            this.isAdult = function()
            { 
                var result = "";
                if(this.age > 18)
                {
                    result = "성인";
                }else
                {
                    result = "미성년자";
                }
                return result;
            }
            console.log(this.name + "씨는 "+ this.isAdult() + " 입니다");
        }

        var sin = new Person("신데렐라", 14, "여", "가정부");
    </script>

 

댓글