본문 바로가기
JavaScript

[JavaScript] - JavaScript 작성 방법 / alert창 / 이벤트리스너 / 클래스네임 / modal

by nam_ji 2023. 11. 29.

자바스크립트 (JavaScrip) 기초

자바스크립트 작성 방법

  • html 파일 생성 및 기본 틀
    1. 파일 생성시 파일명.html로 생성하면 됩니다.
    2. 밑에 코드를 입력하고 body 태그 안에 여러 태그들을 이용하여 틀을 잡고 script 태그 안에 효과를 주면 됩니다.
<!doctype html>
<html lang="ko">
 <head>
  <meta charset = utf-8">
  <title>alert</title>
 </head>
 <body>
    <script>

    </script>
 </body>
</html>
  • body 태그와 script 태그에 간단한 코드를 작성해 보겠습니다.
    1. body에 h1 태그를 이용하여 글자를 입력하고 h1 태그에 id를 부여해 보겠습니다.
    2. 이후 script 태그 안에 h1 태그의 글자를 바꿀 수 있는 코드를 작성해 보겠습니다.
    3. innerHTML은 내가 선택한 id의 HTML안의 내용을 변경하겠다는 의미입니다.
    4. style.color는 글자색을 변경하겠다, style.fontSize는 글자 크기를 변경하겠다는 의미입니다.
<!doctype html>
<html lang="ko">
 <head>
  <meta charset = utf-8">
  <title>alert</title>
 </head>
 <body>
   
    <h1 id="hello">
        안녕하세요
    </h1>
    <h1 id="hi">JS 초보에요</h1>
    <script>
        document.getElementById('hello').innerHTML = '안녕';
        document.getElementById('hi').style.color = 'blue';
        document.getElementById('hi').style.fontSize = '16px';
        /*
        document : 문서
        . : ~의
        getElementById : id를 가져와라 - 셀렉터라고 부른다.
        . : ~의
        innerHTML : HTML 안의 내용을
        = 오른쪽 내용을 왼쪽에 담는다
        */
    </script>
 </body>
</html>

자바스크립트 활용 alert창

  • alert창 만들기
    1. alert 창을 만들기 위한 html 파일 생성
    2. body 태그 안에 alert 창의 틀을 만들어 둡니다.
    3. script 태그 안에 alert을 보이게 하고 숨기게 할 수 있게 style의 display를 작성합니다.
    4. css 파일을 만들고 alert을 스타일링 하기 위해 class명을 부여하고 그 class명을 이용하여 css를 작성합니다.
      class명을 이용하여 css는 .클래스명 id를 이용한 css는 #아이디명 이렇게 작성하시면 됩니다.
<!doctype html>
<html lang="ko">
 <head>
  <meta charset = utf-8">
  <title>alert</title>
  <link rel="stylesheet" href="main.css">
 </head>
 <body>

    <div class="alert-box" id="alert">알림창 입니다.</div>
    <button onclick="alertOpen()">알림창 열림</button>
    <button onclick="alertClose()">알림창 닫기</button>

    <script>

        function alertOpen() {
            document.getElementById('alert').style.display = 'block';
        }
        function alertClose() {
            document.getElementById('alert').style.display = 'none';
        }
        /*
        function 작명 () {

        }
        이런식으로 작성
        */

    </script>

 </body>
</html>
----------------------------------css---------------------------------------
.alert-box {
    background-color: skyblue;
    padding: 20px;
    color: white;
    border-radius: 5px;
    display: none;
  }
  • 파라미터를 이용한 alert
    1. 이번에는 파라미터를 이용한 alert창을 만들어 보겠습니다.
    2. 위와 똑같이 코드를 작성하고 몇가지만 바꿔 alert창을 만들어 보겠습니다.
    3. function 작명 () {} 여기서 ()여기 안에 들어가는 값이 파라미터이고 onclick 이벤트에 작명(원하는 style이벤트)를 작성하면 내가 지정한 function으로 파라미터가 들어가면서 스크립트가 동작합니다.
<!doctype html>
<html lang="ko">
 <head>
  <meta charset = utf-8">
  <title>alert1</title>
  <link rel="stylesheet" href="main.css">
 </head>
 <body>

    <!-- <div class="alert-box" id="alert">알림창 입니다.</div>
    <button onclick="alertButton('block');">알림창 열림</button>
    <button onclick="alertButton('none');">알림창 닫기</button> -->
    <div class="alert-box" id="alert">
        <p id="name">알림창 입니다.</p>
        <button onclick="alertClose('none');">닫기</button>
    </div>
        <button onclick="alertid('block');">아이디 버튼</button>
        <button onclick="alertpw('block');">비밀번호 버튼</button>

    <script>

        function alertClose(parameter) {
            document.getElementById('alert').style.display = parameter;
        }
        function alertid(parameter) {
            document.getElementById('name').innerHTML = "아이디를 입력하세요";
            document.getElementById('alert').style.display = parameter;
        }
        function alertpw(parameter) {
            document.getElementById('name').innerHTML = "비밀번호를 입력하세요";
            document.getElementById('alert').style.display = parameter;
        }
        // function alertButton(parameter) {
        //     document.getElementById('alert').style.display = parameter;
        // }

    </script>

 </body>
</html>
------------------------------------------------css------------------------------------------------
.alert-box {
    background-color: skyblue;
    padding: 20px;
    color: white;
    border-radius: 5px;
    display: none;
  }

이벤트리스너

  • 이벤트리스너를 이용하여 마우스로 버튼 클릭시 변화를 줄 수 있게 해보겠습니다.
    1. alert창을 만들었을 때의 코드를 이용하여 아이디버튼을 클릭하면 아이디를 입력하라는 알림창이 뜨고,
      비밀번호 버튼을 클릭하면 비밀번호 알림창이 뜨고,
      닫기 버튼을 누르면 알림창을 닫을 수 있게 해보겠습니다.
    2. 그러기 위해 각 버튼에 id를 부여하고 그 아이디를 찾을 수 있게 getElementById를 이용합니다.
    3. 후에 클릭 이벤트를 사용하기 위해 addEventListener를 사용합니다.
    4. addEventListener(이벤트, function() {} 이런식으로 작성합니다.
<!doctype html>
<html lang="ko">
 <head>
  <meta charset = utf-8">
  <title>eventlistener</title>
  <link rel="stylesheet" href="main.css">
 </head>
 <body>

    <div class="alert-box" id="alert">
        <p id="name">알림창 입니다.</p>
        <button id="close">닫기</button>
    </div>
        <button id="alertOpen">아이디 버튼</button>
        <button id="alertClose">비밀번호 버튼</button>

    <script>

        document.getElementById('close').addEventListener('click', function() {
            document.getElementById('alert').style.display = 'none';
        });
        document.getElementById('alertOpen').addEventListener('click', function() {
            document.getElementById('alert').style.display = 'block';
            document.getElementById('name').innerHTML = '아이디를 입력하세요';
        });
        document.getElementById('alertClose').addEventListener('click', function() {
            document.getElementById('alert').style.display = 'block';
            document.getElementById('name').innerHTML = '비밀번호를 입력하세요';
        });
       
        /*
            여기서 function()을 콜백함수라고 부르고,
            자바스크립트에서는 순차적으로 실행하고 싶을 때 자주 사용
        */
     
    </script>

 </body>
</html>
-------------------------------------------css---------------------------------------------
.alert-box {
    background-color: skyblue;
    padding: 20px;
    color: white;
    border-radius: 5px;
    display: none;
  }

클래스네임 사용법

  • 클래스네임
    1. 클래스네임은 아이디를 부여하는 방법과 동일합니다.
    2. 원하는 태그에 class="작명" 이렇게 하면 클래스네임이 지정됩니다.
    3. 아이디와 다른점이 있다면 아이디는 동일한 이름을 부여할 수 없지만 클래스네임은 동일한 이름을 부여할 수 있기 때문에 getElementsByClassName('작명')[내가 선택하고자 하는 태그의 순서] 이렇게 작성해야 합니다. 컴퓨터는 처음 시작이 0이기 때문에 첫번째 클래스네임을 가져오고 싶다면 getElementsByClassName('작명')[0] 이렇게 작성하면 됩니다.
<!doctype html>
<html lang="ko">
 <head>
  <meta charset = utf-8">
  <title>className</title>
  <link rel="stylesheet" href="main.css">
 </head>
 <body>

    <div class="alert-box" id="alert">
        <p class="name">알림창 입니다.</p>
        <button id="close">닫기</button>
    </div>
        <button id="alertOpen">아이디 버튼</button>
        <button id="alertClose">비밀번호 버튼</button>

    <script>

        document.getElementById('close').addEventListener('click', function() {
            document.getElementById('alert').style.display = 'none';
        });
        document.getElementById('alertOpen').addEventListener('click', function() {
            document.getElementById('alert').style.display = 'block';
            document.getElementsByClassName('name')[0].innerHTML = '아이디를 입력하세요';
        });
        document.getElementById('alertClose').addEventListener('click', function() {
            document.getElementById('alert').style.display = 'block';
            document.getElementsByClassName('name')[0].innerHTML = '비밀번호를 입력하세요';
        });
     
    </script>

 </body>
</html>
-----------------------------------------------------css-----------------------------------------------------------------
.alert-box {
    background-color: skyblue;
    padding: 20px;
    color: white;
    border-radius: 5px;
    display: none;
  }

Jquery

  • html문서 안의 태그들을 가져와서 동적으로 동작하게 하기 위해 id와 class를 부여합니다.
    지금까지의 코드를 조금 더 간단하게 작성하기 위해 document.querySelector를 사용하는데 여기서 더 간단하게 작성하기 위해 Jquery를 사용합니다.
  • 사용 방법은 Jquery cdn 사이트에 들어가 script태그 하나를 복사해 옵니다.
    이 코드를 head 또는 body태그에 넣어서 사용하면 됩니다.
  • jquey는 document.querySelector를 $로 축약하여 사용합니다.
    id를 불러올 때는 #아이디명, class를 불러올 때는 .클래스명으로 작성하면 됩니다.
    $(#아이디명), $(.클래스명) 뒤에 오는 이벤트들은 지금까지 작성한 방법과 다르니 검색해서 사용해야 합니다.
    jquery 사용 예시로 네비게이션바의 코드를 보여드리겠습니다.
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
    <link href="main.css" rel="stylesheet">
    <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>

    <title>BootStrap&Navbar</title>
  </head>
  <body>

    <div class="black-bg">
        <div class="white-bg">
          <h4>로그인하세요</h4>
          <button class="btn btn-danger" id="close">닫기</button>
        </div>
      </div>

    <nav class="navbar navbar-light bg-light">
        <div class="container-fluid">
          <span class="navbar-brand">Navbar</span>
          <button class="navbar-toggler" type="button">
            <span class="navbar-toggler-icon"></span>
          </button>
        </div>
      </nav>

      <ul class="list-group">
        <li class="list-group-item">An item</li>
        <li class="list-group-item">A second item</li>
        <li class="list-group-item">A third item</li>
        <li class="list-group-item">A fourth item</li>
        <li class="list-group-item">And a fifth one</li>
      </ul>

      <!-- <p class="hello">안녕</p>
      <p class="hello">안녕</p>
      <p class="hello">안녕</p>
      <button id="test-btn">버튼</button> -->

      <button id="login-modal">로그인</button>

      <script>

        $('#close').on('click', function() {
            $('.black-bg').fadeToggle('show');
        });

        $('#login-modal').on('click', function() {
            $('.black-bg').fadeToggle('show');
        });

        // document.querySelector('#test-btn').addEventListener()
        // $('#test-btn').on('이벤트', function() {
        //     "이런식으로 사용"
        // });
        // document.querySelector('.hello').innerHTML= '바보';
        // $('.hello').html('바보');

        // document.querySelector('.navbar-toggler').addEventListener('click', function() {
        //     document.querySelectorAll('.list-group')[0].classList.toggle('show');
        // });

        document.querySelector('.navbar-toggler').addEventListener('click', function() {
            document.querySelector('.list-group').classList.toggle('show');
        });

        // document.querySelector('.list-group')/

        // document.getElementsByClassName('navbar-toggler')[0].addEventListener('click', function() {
        //     document.getElementsByClassName('list-group')[0].classList.toggle('show');
        // });

      </script>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
  </body>
</html>
---------------------------------------------------------css------------------------------------------------------------
.alert-box {
    background-color: skyblue;
    padding: 20px;
    color: white;
    border-radius: 5px;
    display: none;
  }

.list-group {
  display: none;
}

.show {
  display: block;
}

if문

  • 자바스크립트로 if문을 사용해 보겠습니다.
  • if문은 기본적으로 다른 언어와 똑같이 사용하면 됩니다.
    if(조건문1) {
             조건문1이 true면 실행
    } else if (조건문2) {
             조건문1일 false이고 조건문2가 true면 실행
    } else {
              조건문1과 조건문2 둘 다 false면 실행
    }
  • if문 예시는 모달창을 통해 보여드리겠습니다.
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
    <link href="main.css" rel="stylesheet">
    <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>

    <title>if문</title>
  </head>
  <body>

    <div class="black-bg">
        <div class="white-bg">
          <h4>로그인하세요</h4>
          <form action="success.html">
            <div class="my-3">
              <input type="text" class="form-control" id="id">
             </div>
             <div class="my-3">
               <input type="password" class="form-control" id="pw">
             </div>
             <button type="submit" class="btn btn-primary" id="send">전송</button>
             <button type="button" class="btn btn-danger" id="close">닫기</button>
          </form>
        </div>
    </div>

    <script>

        // if문의 조건 안에서 사용하는 몇가지 == <= < > >= != && ||

        document.getElementById('id').addEventListener('input', function() {
            console.log("id변화감지");
        });
        document.getElementById('pw').addEventListener('change', function() {
            console.log("pw변화감지");
        });
       
        $('#send').on('click', function() {
            if($('#id').val() == "") {
                alert("아이디를 입력해 주세요");
            } else if ($('#pw').val() == "") {
                alert("비밀번호를 입력해 주세요.");
            } else if ($('#pw').val().length <= 6) {
                alert("비밀번호가 너무 짧습니다.");
            }
        });

        // form 태그로 이벤트 발생하게 하는 방법
        // $('form').on('submit', function() {
        //     if(document.getElementById('id').value == '') {
        //         alert("아이디를 입력해 주세요");
        //     } else if (document.getElementById('pw').value == '') {
        //         alert("비밀번호를 입력해 주세요.")
        //     }
        // });

    </script>

    <nav class="navbar navbar-light bg-light">
        <div class="container-fluid">
          <span class="navbar-brand">Navbar</span>
          <button class="navbar-toggler" type="button">
            <span class="navbar-toggler-icon"></span>
          </button>
        </div>
      </nav>

      <ul class="list-group">
        <li class="list-group-item">An item</li>
        <li class="list-group-item">A second item</li>
        <li class="list-group-item">A third item</li>
        <li class="list-group-item">A fourth item</li>
        <li class="list-group-item">And a fifth one</li>
      </ul>

      <div class="main-bg">
        <h3>Shirts on Sale</h3>
        <button id="login-modal">로그인</button>
      </div>
     

      <script>

        $('#close').on('click', function() {
            $('.black-bg').addClass('close-modal');
        });

        $('#login-modal').on('click', function() {
            $('.black-bg').addClass('show-modal');
        });

        document.querySelector('.navbar-toggler').addEventListener('click', function() {
            document.querySelector('.list-group').classList.toggle('show');
        });

      </script>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
  </body>
</html>
-----------------------------------------------css-----------------------------------------------------
.list-group {
  display: none;
}

.show {
  display: block;
}

.black-bg {
  width : 100%;
  height : 100%;
  position : fixed;
  background : rgba(0,0,0,0.5);
  z-index : 5;
  padding: 30px;
  visibility: hidden;
  opacity: 0;
  transition: all 1s;
}
.white-bg {
  background: white;
  border-radius: 5px;
  padding: 30px;
}

.show-modal {
  visibility: visible;
  opacity: 1;
}

.close-modal {
  visibility: visible;
  opacity: 0;
}