순서도
순서를 넘기는 경우 아래와 같은 순서를 거쳐야한다.
코드
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>끝말잇기</title>
</head>
<body>
<div><span id="order">1</span>번째 참가자</div>
<div>제시어: <span id="word"></span></div>
<input type="text" />
<button>입력</button>
<script>
const number = Number(prompt("몇 명이 참가하나요?"));
const $button = document.querySelector("button");
const $input = document.querySelector("input");
const $word = document.querySelector("#word");
const $order = document.querySelector("#order");
let word; // 제시어
let newWord; // 새로 입력한 단어
const onClickButton = () => {
if (!word || word[word.length - 1] === newWord[0]) {
// 제시어가 없거나 올바르게 입력했을 때
// 제시어(첫번째 순서)가 있는지 확인하는게 우선순위 높으므로 먼저 판별하도록 함
word = newWord; // 제시어를 현재 단어로
$word.textContent = word; // 화면에 띄우기
const order = Number($order.textContent); // 현재 순서
// 순서 정하기
if (order + 1 > number) {
$order.textContent = 1;
} else {
$order.textContent = order + 1;
}
} else {
// 올바르게 입력하지 않았을때
alert("올바르지 않은 단어입니다!");
}
// 위 과정이 다 수행됐을 때
$input.value = ""; // 입력창 비우기
$input.focus(); // 입력창 focus
};
const onInput = (event) => {
newWord = event.target.value; // 현재 단어를 현재 input에 있는 단어로
};
$button.addEventListener("click", onClickButton);
$input.addEventListener("input", onInput);
</script>
</body>
</html>
개념 정리
대화상자 띄우기
- promt : 대화 상자에 사용자가 입력한 메시지가 문자열 형태로 전달되고, 입력하지 않고 취소를 누르면 null이 전달된다.
- alert : 단순 알림창. 호출하면 확인을 누르기 전까지 다음 스크립트 실행이 중단된다.
- confirm : 사용자에게 확인을 받을 때 사용. 확인을 누르면 true, 취소를 누르면 false를 전달한다.
HTML 태그 선택하기
document.querySelector("선택자");
document.querySelectorAll("선택자");
document.querySelector("#아이디");
document.querySelector(".클래스");
document.querySelector("span#order"); 처럼 붙여써서 id가 order인 span을 가져올 수 있다.
document.querySelector("선택자 내부선택자 내부선택자...");
공백이 있으면 자손이다. 너무 길어진다면 id 하나 주는 식으로 하는 것을 추천한다.
만약 내가 자식만 표현하고 싶으면 "선택자>자식" 이렇게 해야한다.(CSS랑 똑같다)
태그에 이벤트 달기
태그.addEventListener("이벤트 이름", 리스너함수);
리스너 함수는 이벤트가 발생할 때 실행되는 함수이다.
첫번째 인수로 이벤트 이름을 넣고, 두 번째 인수로 리스너 함수를 넣는다.
이때, 리스너함수에 ()를 붙이면 안된다. ()는 함수를 호출한다는 뜻으로, 그냥 곧바로 undefiend가 반환되기 때문이다.
const 리스너함수 = (event) => {
console.log(event.target.value);
};
리스너 함수에는 매개변수로 event 객체를 제공해서 이벤트와 관련된 정보를 얻을 수 있다.
여기서 event.target은 이벤트가 발생한 대상 태그를 가리킨다.
입력창.value; // 입력창의 값을 가져옴
입력창.value = 값; // 입력창에 값을 넣음
입력창에 입력된 값은 value 속성으로 가져온다.
태그.textContnet; // 태그 내부의 문자를 가져옴
태그.textContent = 값; // 태그 내부의 문자를 해당 값으로 설정함
입력 태그(input, select, textarea 등)가 아닌 일반 태그들의 내부 값을 가져올 때는 value가 아니라 textContent 속성을 사용한다.
입력창.focus();
입력창이나 버튼의 경우 focus 메서드를 호출하면 해당 태그가 하이라이트된다.
Self Check 쿵쿵따 게임 만들기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>쿵쿵따</title>
</head>
<body>
<div><span id="order">1</span>번째 참가자</div>
<div>제시어: <span id="word"></span></div>
<input type="text" />
<button>버튼</button>
</body>
<script>
const $input = document.querySelector("input");
const $button = document.querySelector("button");
const $order = document.querySelector("#order");
const $word = document.querySelector("#word");
const number = Number(prompt("몇 명이 참가하나요?"));
let word; // 제시어
let newWord; // 현재 단어
let order = Number($order.textContent);
if (number) {
const onClickButton = () => {
if (
newWord.length === 3 &&
(!word || word[word.length - 1] === newWord[0])
) {
word = newWord;
$word.textContent = word;
order++;
if (order > number) order = 1;
$order.textContent = order;
} else {
alert("올바르게 입력하지 않았습니다.");
}
$input.value = "";
$input.focus();
};
const onInput = (e) => {
newWord = e.target.value;
};
$button.addEventListener("click", onClickButton);
$input.addEventListener("input", onInput);
}
</script>
</html>
끝말잇기와 다른 점은 쿵쿵따는 꼭 세글자여야한다. 그 조건을 넣었다.
그리고 이 Self Check에서는 처음에 몇 멍이 참가할 지 선택할 때 사용자가 취소를 누르면 코드를 실행되지 않게 처리하라고 해서 코드 전체에 if문으로 감싸주었다.
만약 prompt 에서 취소를 누르면 null값이 전달이 되고, 그 값이 Number로 형변환 될때 NaN이 되므로 if문 내부의 코드가 실행되지 않게된다.
참고: Let’s Get IT 자바스크립트 프로그래밍 책
'JavaScript' 카테고리의 다른 글
함수 호출한 것을 보면, 그 자리에 return한 값을 대체해보자. (0) | 2023.01.31 |
---|---|
함수 사용하기 - 계산기 (고차 함수 사용, if 문 중첩 제거) (0) | 2023.01.21 |
순서도 그리기 (0) | 2023.01.19 |
[모던 자바스크립트 Deep Dive] 18장 - 함수와 일급 객체 (0) | 2023.01.09 |
[모던 자바스크립트 Deep Dive] 17장 - 생성자 함수에 의한 객체 생성 (2) | 2023.01.09 |