Cute Blinking Unicorn

프론트엔드/JavaScript

11/15 클론코딩 시작전 기초 연습

민밥통 2023. 11. 15. 14:20

https://www.google.com/search?q=%EB%8B%A8%EC%9C%84%EB%B3%80%ED%99%98&oq=%EB%8B%A8%EC%9C%84%EB%B3%80%ED%99%98&gs_lcrp=EgZjaHJvbWUyDwgAEEUYORiDARixAxiABDIHCAEQABiABDIHCAIQABiABDIMCAMQABgUGIcCGIAEMgcIBBAAGIAEMgcIBRAAGIAEMgcIBhAAGIAEMgcIBxAAGIAEMgcICBAAGIAEMgcICRAAGIAE0gEIMjQ2NmowajeoAgCwAgA&sourceid=chrome&ie=UTF-8

 

🔎 단위변환: Google 검색

 

www.google.com

 

단위 변환 하는 것을 확인하면서 한번 확인 해보기~!

(수업시작)


inch를 cm로 바꾸기


HTML

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>inch를 cm로</title>
    <script src="/js/event.js"></script>
    <!-- <script>
    </script> -->
  </head>
  <body>
    <input type="text" /> inch
    <button>계산</button>
    <!-- 계산하는 버튼을 눌러주면 -->
    <p></p>
    <!-- p라는 영역에 계산된 결과값이 나오도록 할 것 -->
  </body>
</html>
 

 

JavaScript

//첫번째 매개변수는 이벤트를 넣어주고 두번째 매개변수는 이 이벤트에 해당하는거를 실행했을 때 실행되는 동작을 넣어줌
// 그동작은 나는 함수로 할 거고 익명함수로 바로 즉시 실행하면 되니까
//이와같이 함수를 바로 실행하겠다

//() => 좀더 함수를 간단하게 표현하기 위해서 사용하는 표현법
document.addEventListener("DOMContentLoaded", () => {
  const input = document.querySelector("input");
  const button = document.querySelector("button");
  const p = document.querySelector("p");

  button.addEventListener("click", () => {
    //입력 받은 값을 숫자로 변환
    const inch = Number(input.value);

    //숫자가 아니면 종료, else 변환해서 출력
    if (isNaN(inch)) {
      p.textContent = "숫자를 입력하세요";
      return;
    }
    //숫자인지 아닌지 isNan이라는 함수를 이용
    //변환해서 출력
    const cm = Number(input.value) * 2.54;
    p.textContent = `${cm} cm`;
  });
});

 

중간쯤에 있는 isNaN에 대한 부가 설명

    if (isNaN(inch)) {
      p.textContent = "숫자를 입력하세요";
      return;
    }
    //숫자인지 아닌지 isNan이라는 함수를 이용

p라는 p요소의  textContent로 안내 메세지 출력해주는 게 좋아서 넣고

출력해주고 종료 한다

숫자가 들어오면 아래로 떨어져서 변환을 해주고 inxh에다가 곱해주면 된다. 

 

결과

문자를 입력하면

이렇게 숫자를 입력하라고 뜬다. 

 

(엔터를 누르면 결과값 나오게 하는 것)

HTML

    <!-- <form id="conversionForm">
      <input type="text" id="inchInput" /> inch
      <button type="submit">계산</button>
      <p id="result"></p> -->
    <!-- 계산하는 버튼을 눌러주면 -->
    <!-- p라는 영역에 계산된 결과값이 나오도록 할 것 -->

JS

//첫번째 매개변수는 이벤트를 넣어주고 두번째 매개변수는 이 이벤트에 해당하는거를 실행했을 때 실행되는 동작을 넣어줌
// 그동작은 나는 함수로 할 거고 익명함수로 바로 즉시 실행하면 되니까
//이와같이 함수를 바로 실행하겠다

//() => 좀더 함수를 간단하게 표현하기 위해서 사용하는 표현법
document.addEventListener("DOMContentLoaded", () => {
  const form = document.getElementById("conversionForm");
  const input = document.getElementById("inchInput");
  const resultParagraph = document.getElementById("result");

  form.addEventListener("submit", (event) => {
    event.preventDefault(); // Prevents the form from submitting in the traditional way

    // 입력 받은 값을 숫자로 변환
    const inch = Number(input.value);

    // 숫자가 아니면 종료, else 변환해서 출력
    if (isNaN(inch)) {
      resultParagraph.textContent = "숫자를 입력하세요";
      return;
    }

    // 변환해서 출력
    const cm = inch * 2.54;
    resultParagraph.textContent = `${cm} cm`;
  });
});


aaa, bbb, ccc 를 변경


 HTML

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>inch를 cm로</title>
    <script src="/js/event.js"></script>
    <!-- <script>
    </script> -->
  </head>
  <body>
    <select>
      <option>aaaa</option>
      <option>bbbb</option>
      <option>cccc</option>
    </select>
    <p>선택: aaaa</p>
  </body>
</html>

 JS 

document.addEventListener("DOMContentLoaded", () => {
  //객체를 모두 검색해라
  const select = document.querySelector("select");
  const p = document.querySelector("p");

  select.addEventListener("change", (event) => {
    //change라는 이벤트가 발생하면 select 된애를 대상으로
    //이벤트를 발생시킨 객체에 접근하는 방법이 여기에서는 커런트 타킷이라는 것을 이용해야함
    // 옵션이 여러개임
    const options = event.currentTarget.options;
    //이벤트가 뭔가 선택이 됐을 거임 매개변수를 넣어줄거임
    //이벤트 된 것를 매개변수로
    //커랜트타켓이라는 속성을 가지고 옵션에 해당하는 거를 여기로 다시 넘겨준다.
    const index = event.currentTarget.options.selectedIndex;
    //여러개의 옵션중에서 select된 index값을 select된 index값을 넣어주겠다.

    p.textContent = `선택: ${options[index].textContent}`;
    //옵션 위치는 인덱스
  });
});

 

결과

 

 const index = event.currentTarget.options.selectedIndex;

selectedIndex 애도 프로퍼티에 해당이 된다. 

selectedIndex  > 옵션 엘리먼트 > 옵션에 해당하는 인덱스값을 가지고 올 때 사용하는 속성(프로퍼티)이다 

 


document.addEventListener("DOMContentLoaded", () => {
  //객체를 모두 검색해라
  const select = document.querySelector("select");
  const p = document.querySelector("p");

  select.addEventListener("change", () => {
    const options = event.currentTarget.options;
    const index = event.currentTarget.options.selectedIndex;
  
    p.textContent = `selectedIndex: ${index}`;

    p.textContent = `선택: ${options[index].textContent}`;
    //옵션 위치는 인덱스
  });
});

   p.textContent = `selectedIndex: ${index}`;

이 부분을 잘 보면 셀렉ㅌ트 인덱스에다가 인덱스라는 위치를 지정해주면 나옴


document.addEventListener("DOMContentLoaded", () => {
  //객체를 모두 검색해라
  const select = document.querySelector("select");
  const p = document.querySelector("p");

  select.addEventListener("change", () => {
    // const options = select.cuoptions;
    //select라는 객체에서  change된 index값만 출력을 해봐라
    const index = select.selectedIndex;
    //여러개의 옵션중에서 select된 index값을 select된 index값을 넣어주겠다.
    p.textContent = `selectedIndex: ${index}`;

    // p.textContent = `선택: ${options[index].textContent}`;
    //옵션 위치는 인덱스
  });
});

이렇게도 된다

이벤트라는 매개변수도 필요하고 타킷팅도 필요함 (인식을 시켜줘야하는 부분)

change이벤트는 드롭다운에서 주로 발생되는 거라고 보면 된다. 


HTML

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>inch를 cm로</title>
    <script src="/js/event.js"></script>
    <!-- <script>
    </script> -->
  </head>
  <body>
    <input type="text" />cm<br />
    <span></span>
    <select>
      <option value="10">mm</option>
      <option value="0.01">m</option>
      <option value="0.393701">inch</option>
    </select>
  </body>
</html>


inch , m, mm 세개 다 변경할 수 있는 법


HTML

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>inch를 cm로</title>
    <script src="/js/event.js"></script>
    <!-- <script>
    </script> -->
  </head>
  <body>
    <input type="text" />cm<br />
    <span></span>
    <select>
      <option value="10">mm</option>
      <option value="0.01">m</option>
      <option value="0.393701">inch</option>
    </select>
  </body>
</html>

 

JS

let 변환상수;
let 입력값;

document.addEventListener("DOMContentLoaded", () => {
  const input = document.querySelector("input");
  const span = document.querySelector("span");
  const select = document.querySelector("select");

  //계산해서 출력
  const calculate = () => {
    span.textContent = 입력값 * 변환상수;
  };

  //단위 선택
  select.addEventListener("change", (event) => {
    const options = event.currentTarget.options;
    const index = event.currentTarget.selectedIndex;
    변환상수 = Number(options[index].value);
    calculate();
  });
  //입력받기
  input.addEventListener("keyup", (event) => {
    입력값 = Number(event.currentTarget.value);
  });
});
 


좀 더 손을 댄 것(수정한 결과)

HTML

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>inch를 cm로</title>
    <script src="/js/event.js"></script>
    <!-- <script>
    </script> -->
  </head>
  <body>
    <input
      type="text"
      placeholder="숫자를 입력하세요!"
      style="width: 120px"
    />cm =>
    <span></span>
    <select>
      <option value="10">mm</option>
      <option value="0.01">m</option>
      <option value="0.393701">inch</option>
    </select>
  </body>
</html>

JS

let 변환상수;
let 입력값;

document.addEventListener("DOMContentLoaded", () => {
  const input = document.querySelector("input");
  const span = document.querySelector("span");
  const select = document.querySelector("select");

  //계산해서 출력
  const calculate = () => {
    span.textContent = (입력값 * 변환상수).toFixed(2);
  };

  //단위 선택
  select.addEventListener("change", (event) => {
    const options = event.currentTarget.options;
    const index = event.currentTarget.selectedIndex;
    변환상수 = Number(options[index].value);
    calculate();
  });
  //입력받기
  input.addEventListener("keyup", (event) => {
    입력값 = Number(event.currentTarget.value);
    calculate();
    //m이냐 inch냐 조건문으로 무러보지 않아도 됨.
  });
});