console.log(1 + '2');// '12'출력됨
자바스크립트에서 덧셈기호 쓰면 문자이어붙이기가 쉽게 가능하다.
숫자 + 숫자는 숫자 덧셈해주는데
문자 + 숫자처럼 적어도 1개가 문자면 문자 덧셈을 해준다.
(문자덧셈은 그냥 문자2개 이어붙여준다.)
let a = '안녕';
console.log('문자' + a + '문자');// '문자안녕문자'출력됨
그래서 문자중간에 변수넣고 싶으면 덧셈기호를 활용하면 된다.
let a = '안녕';
console.log(`문자 ${a} 문자`);// '문자안녕문자'출력됨
새로운 방법을 알아보자면
백틱기호를 사용하는 방법이다.
백틱기호도 문자만들어주는데
${ 변수명 } 문법을 이용가능하다.${ } 이건 문자안에 변수넣어주는 간단한 문법이다.
일반 따옴표안에선 사용불가능하다.
한번 list.js 고쳐보자
const cardTitle = document.querySelectorAll(".title");
const cardPrice = document.querySelectorAll(".price");
let products = [
{ id: 0, price: 70000, title: "Blossom Dress" },
{ id: 1, price: 50000, title: "Springfield Shirt" },
{ id: 2, price: 60000, title: "Black Monastery" },
];
cardTitle[0].innerHTML = products[0].title;
cardTitle[1].innerHTML = products[1].title;
cardTitle[2].innerHTML = products[2].title;
cardPrice[0].innerHTML = `가격 : ${products[0].price}`;
cardPrice[1].innerHTML = `가격 : ${products[1].price}`;
cardPrice[2].innerHTML = `가격 : ${products[2].price}`;
위와 같이 ${ } 방법을 사용해 보아도 결과는 똑같을 것을 볼 수 있다.
index.html에 아래코드를 넣고 시작하자 (Bootstrap이 설치되어있으면 이쁘게 나옴!)
<form class="container my-5 form-group">
<p>상품선택</p>
<select class="form-select mt-2">
<option>모자</option>
<option>셔츠</option>
</select>
</form>
<select> 는 <input> 이랑 똑같은데
사용자가 고를 수 있는 선택지를 드랍다운 메뉴로 제공하는 <input> 이다.
선택지는 <option>으로 넣으면 된다.
<select> 태그도 선택시 input, change 이벤트가 발생한다.<select> 태그도 .value로 유저가 입력한 값을 가져올 수 있다.<select> 더 보여주기
▲ 유저가 셔츠를 선택하면 하단에 95, 100 을 선택할 수 있는 <select>를 하나 더 만들어보자.
이제 우리가 배웠던 방법을 이용해서 UI를 만들어보자
미리 <select> 하나 더 추가했고 form-hide 클래스에는 display : none 주었다.
index.html
<form class="container my-5 form-group"> <p>상품선택</p> <select class="form-select mt-2"> <option>모자</option> <option>셔츠</option> </select> <select class="form-select mt-2 form-hide"> <option>95</option> <option>100</option> </select> </form>
index.css
.form-hide { display: none; }
이제 "유저가 셔츠선택하면 form-hide 제거해주세요~" 라고 코드짜면 완성이다.
select 요소 변수로 지정
const formSelect = document.querySelectorAll(".form-select");
select의 선택한 값 가져오기 & 실험
let value = formSelect[0].value; console.log(value);
모자가 콘솔에 잘 가져와지는 것을 볼 수 있다. (하지만 셔츠를 클릭했을 땐 콘솔에 나오지 않는다?)
유저가 셔츠를 가져왔다면 form-hide 클래스제거
if (value == "셔츠") { formSelect[1].classList.remove(".form-hide"); }위처럼 코드를 완성시켜도 작동이 되지않는다. 무엇이 문제일까?
<script> 안에 대충 적은 코드는 페이지 로드시 1회 실행됨지금 내용은 중요한 내용이기 때문에 기억해놓자
지금 "유저가 셔츠선택하면 form-hide 제거해주세요~" 라고 코드짰는데
이 코드는 <script> (js) 안에 적었기 때문에 그냥 페이지 로드시 1회 실행되고 다시는 실행되지 않는다.
그래서 저 코드를 <select> 조작할 때 마다 실행한다면 의도대로 잘 동작하지 않을까?
그렇다면 한번 이벤트리스너를 추가시켜보자
const formSelect = document.querySelectorAll(".form-select");
let value = formSelect[0].value;
formSelect[0].addEventListener("input", handleSelect);
function handleSelect() {
if (value == "셔츠") {
formSelect[1].removeClass("form-hide");
}
}
<input>이나 <select> 조작할 때 input 이벤트가 발생하기 때문에 이벤트리스너를 부착해보았다.

결과가 잘 나오는 것을 볼 수 있다.
1. '모자'를 선택했을 때
<select>를 다시 숨기는 기능도 만들어보자.
const formSelect = document.querySelectorAll(".form-select");
formSelect[0].addEventListener("input", handleSelect);
function handleSelect() {
let value = formSelect[0].value;
if (value == "셔츠") {
formSelect[1].classList.remove("form-hide");
} else {
formSelect[1].classList.add("form-hide");
}
}
classList.add를 활용해 '셔츠'가 아니라면 form-hide 클래스를 추가시켜 없앴다.

2. e.currentTarget
아니면this`를 사용하려면 어떻게 바꾸어야할까?
const formSelect = document.querySelectorAll(".form-select");
formSelect[0].addEventListener("input", handleSelect);
function handleSelect(e) {
let value = e.currentTarget.value;
if (value == "셔츠") {
formSelect[1].classList.remove("form-hide");
} else {
formSelect[1].classList.add("form-hide");
}
}
value부분을 특정하지 않고 e.currentTarget 요소에 대한 값을 가져오는 방식을 통해 코드를 수정해보았다.
결과는 똑같이 정상적으로 기능되어졌다.

index.html
<!DOCTYPE html>
<html lang="en">
<head>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"
crossorigin="anonymous" />
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="./index.css" />
<title>Level3</title>
</head>
<body>
<!-- <div class="container mt-3">
<div class="card p-3">
<span class="product">상품명</span>
<span class="price">가격</span>
</div>
</div> -->
<form class="container my-5 form-group">
<p>상품선택</p>
<select class="form-select mt-2">
<option>모자</option>
<option>셔츠</option>
</select>
<select class="form-select mt-2 form-hide">
<option>95</option>
<option>100</option>
</select>
</form>
<script src="./index.js"></script>
</body>
</html>
index.js
// const product = document.querySelector(".product");
// const price = document.querySelector(".price");
// let car2 = { name: "소나타", price: [50000, 3000, 4000] };
// product.innerHTML = car2.name;
// price.innerHTML = car2.price[0];
const formSelect = document.querySelectorAll(".form-select");
formSelect[0].addEventListener("input", handleSelect);
function handleSelect(e) {
let value = e.currentTarget.value;
if (value == "셔츠") {
formSelect[1].classList.remove("form-hide");
} else {
formSelect[1].classList.add("form-hide");
}
}
index.css
.form-hide {
display: none;
}