오늘은 유튜버 '개발자의품격'님의 [ 웹개발 기초편 - 멀티 Select 처리 ] 편에 대해 공부했다.

 

<select> 태그를 이용한 실습은 거의 해본적이 없었기에 공부할 수 있어서 좋았다.

이번 공부는 시간이 없어서 CSS 작업은 하지않았다.

코드 작성은 repl.it을 이용했다.


완성본 - 입력 전
완성본 - 입력 후


<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>replit</title>
  <link href="style.css" rel="stylesheet" type="text/css" />
  <!-- Loads the Extensions API -->
  <script src="https://unpkg.com/@replit/extensions@0.32.1/dist/index.global.js"></script>
</head>

<body>
  <h1>나는 지금</h1>
  <form id='food-form'>
    <select id='food-parent' onchange="loadFoodChild()"></select>
    <select id='food-child'></select>
    <button id=submit-btn>제출하기</button>
  </form>
  <h1 id="final-value"></h1>
  
  <script src="script.js"></script>
</body>

</html>

HTML 코드

 

특별한 점은 없다.

 


async function main() {
  await replit.init();
  // Uses the Replit Extensions `fs` API to grab the list of files 
  // in your root folder, and writes it to the document.
  const { children } = await replit.fs.readDir('.');
  document.write(children.map(c => c.filename).join(', '));
}

window.addEventListener('load', main)

const foodForm = document.getElementById('food-form');
const foodParent = document.getElementById('food-parent');
const foodChild = document.getElementById('food-child');
const finalValue = document.getElementById('final-value');

const foodParentValue = [
  { id: '', value: '' },
  { id: '1', value: '한식' },
  { id: '2', value: '중식' },
  { id: '3', value: '일식' },
];

const foodChildValue = [
  { id: '11', value: '비빔밥' },
  { id: '12', value: '김치찌개' },
  { id: '13', value: '잡채' },
  { id: '21', value: '짜장면' },
  { id: '22', value: '볶음밥' },
  { id: '23', value: '라조기' },
  { id: '31', value: '초밥' },
  { id: '32', value: '라멘' },
  { id: '33', value: '돈부리' },
];

function loadFoodParentValue() {
  const emptyArr = [];
  foodParentValue.forEach(item => {
    emptyArr.push(`<option value=${item.id}>${item.value}</option>`);
  });
  foodParent.innerHTML = emptyArr.join("");
}

function loadFoodChild() {
  const parentValue = foodParent.value;
  const emptyArr = [];
  
  // parentValue에 따라 emptyArr에 옵션 태그를 추가
  foodChildValue.forEach(item => {
    if (item.id.startsWith(parentValue)) {
      emptyArr.push(`<option value=${item.id}>${item.value}</option>`);
    }
  });
  
  foodChild.innerHTML = emptyArr.join("");
}

function handleSubmit(e) {
  e.preventDefault();
  const found = foodChildValue.find(item => item.id == foodChild.value);
  finalValue.innerText = `${found.value} (이)가 먹고싶다!`;
}

foodForm.addEventListener('submit', handleSubmit)

loadFoodParentValue();

JavaScript 코드

 

이번 실습은 조건문과 배열 관련 함수를 이용할 수 있어서 좋았다.

강의에서는 if-else 조건문을 이용하였지만, 나는 switch-case 구문을 이용해 보았다.

 

** startsWith()

js에서 제공하는 기본 함수이다.

안의 인자값으로 시작하는 값만 true값을 반환한다.

ex)

const hi = 'Hello, world';
hi.startsWith(Hello);

위 코드는 true를 반환한다.

 

하지만 소문자, 대문자 구분을 하기 때문에 필요한 경우 전체 문자열을 소문자, 혹은 대문자로 변환 후 이용해야 한다.

 

이외에 Array의 forEach, find 함수 등을 이용해 볼 수 있어서 좋았다.