javaScript DOM 객체와 이벤트 처리를 하는 방법, 여기서 부터는 조금은 복잡한 개념들과 순서, 그리고 방법들이 들어가니 집중하길 바랍니다.
서론
(1) 주문하는 대학교 CC 커플의 체크박스를 누를 시 생기는 이벤트와 주문한 메뉴를 정리하기.
객체의 이벤트 처리 (1) 아래와같은 예제에서 뭐 먹을까 안에는 코드 체크박스가 포함되어 있는데요. 이렇게 포함된 체크박스를 클릭하면, 색깔이 변하면서 전체적인 폰트색깔이 변하는 효과를 주고 싶습니다.
객체의 이벤트 처리 (2) 클릭이 발생한 메뉴를 [] 이 주문되었습니다의 대괄호 안에 넣어주기
(2) 이를 풀기 위한 자바스크립트와 부트스트랩이 연동된 코드를 나열해보겠습니다. 코드를 나열한 후 코드를 분석하는 시간을 가지도록 합니다. 아래는 객체와 이벤트처리에 관한, 위의 내용을 담기 위해서 작성된 코드라고 볼 수 있습니다.
여기서 사실 제가 집중한 것이 있다면, class명을 어떻게 선언하고 목록을 어떻게 만들었는지인데요. 이렇게 목록을 맏늘때마다 정형화된 네임, 그리고 누구나 판단하기 쉬운 클래스명을 사용하면 조금 더 편히 코드를 사용할 수 있다고 판단이 됩니다. 노란색으로 네모친 곳은 html이 아닌 JS에 연동되는 부분이기 때문에 주의깊게 봐주세요.
본론
(1) 각각의 체크박스 목록에 ID는 어디에 사용될까? : 정답 체크 시, CSS에 적용됩니다.
위의 내용을 세부적으로 판단해본다면, 여성이 대답하는 부분중 A의 체크박스인 코드는 아래와 같습니다. 여기서 input class를 사용함으로서 각각의 checkbox 타입에 id를 설정해준 것을 볼 수 있는데요. 이런 ID의 쓰임새는 우리가 CSS를 javaScript를 통해서 효과를 줄 수 있다는 점입니다.
<div class="targets">
<ul class="list-group">
<li class="list-group-item">
<input class="form-check-input me-1" type="checkbox" name="answers" value="a" id="answer-a">
<label class="form-check-label">A. 중국집에서 먹기 싫어</label>
</li>
(2) 그럼, 왜 div로 목록들을 전체로 묶었을까?
위의 코드를 조금 더 정확하게 보고 계시다면 tagets를 묶은 이유를 알 수 있을텐데요. 각각의 목록의 색깔의 변화를 주는 css를 입히고 싶다면 그들의 객체를 생성해야합니다. 하지만 목록의 객체를 생성하기보다는 클래스의 객체를 생성해서 효과를 주는 것이 조금 더 간단한 편이죠. 그렇기 때문에 div로 목록을 하나씩 감싸고, 거기에 class명을 지어주는 것입니다.
"넌 내 타겟이 될꺼야" 라고요 : 너는 CSS의 타겟이 될 것이다!
(1-1) 그럼 자바스크립트에서는 어떻게 작성될까?
자바스크립트에서는 CSS 적용을 하기 위해서는, DOM 객체를 가져와서, querySelecor를 통해 ID값을 가져옵니다.
여기서 querySelecor와 querySelecorALL은, 자바스크립트 내에서 요소를 찾는 것입니다. 각각의 다른 파일에 있는 자바스크립트의 요소를 가져올 때 유용하게 사용하는 명령어 중 하나이죠.
(1-2) 자바스크립트에서 요소를 가져오는 순서는 어떻게 될까?
자바스크립트에서 간단한 순서를 만드는 것은 쉽습니다. 객체를 가져오고, 그리고 리스너를 달아 감시 역할을 하게 한 다음에 처리를 수행시키면 되는데요. 순서대로 한번 보도록 할게요.
DOM의 객체의 요소를 가져옵니다 : "문서 안에 어디 뒀더라? 쓰려했던 것좀 찾아봐 내가 거기다가 찾기 쉽게 아이디 붙여놨음"
const currectInput = document.querySelecotr('#answer-c");
그리고 이벤트로만 설정했던 객체를 가지고 옵니다. 저는 div에 target층을 묶어두고, 그리
const checkbox = event.target;
const listItem = checkbox.parentNode;
2. 문서를 찾고 나선, 문서를 누가 입력하는 지 감시하는 부장님을 붙여줍니다. "얘들아 일해라"
스크립트어 우리말로 번역하기 : 너희들이 뭐라 입력하는지 지키볼게 내가 니가 지원한 change 이벤트 담당 부장님인거 알지? 입력하는 게 어떤 것인지 모두 다 지켜볼거야.
currentInput.addEventListener("change",fuction(event) {
3. 그런데 말이야, 체크된 체크박스들의 상태를 확인해보고, 이들의 부모인 listItem에 클래스List를 추가할게. "text-success"를 말이야 만약 박스가 체크되어있다면 ture값을 반환해주고, 체크되어있지 않다면 else 값에 있는 중괄호를 실행해줘.
if(checkbox.checked){
listItem.classList.add('text-success');
}else{
listItem.classList.remove('text-primary');
}
});
(3) 똑같은 방법에 따라서 answer-a/b/c를 만들어주고, 장바구니에 담아보기.
(3-1) 장바구니에 담기 위해 필요한 데이터를 배열로 생성해줄겁니다.
const menuCart = [];
(3-2) 결과를 출력하는 요소 값을 가져 올겁니다. 결과를 출력할 요소 값은 html에서 "[]이 주문되었습니다"를 출력할 order-list라는 div의 id값에 출력하도록 하겠습니다.
const resultDiv = document.querySelector('#order-list');
그리고 객체를 한번 더 생성하여, 버튼을 누를 시에 ID값이 practice-3의 버튼을 호출 할 수 있도록 입력해줍니다.
const menuButtons =
document.querySelectorAll('#practice-3 button');
마지막으로 각각의 리스너(감시자)를 달아서, 마무리해줍니다. 리스너를 달 때는 각각의 객체에 리스너를 달기 번거롭기 때문에 for문을 이용해서 달아줄텐데요. button에 대한 값을 인덱스 값으로 설정하고, 클릭을 할때마다, functiond의 event가 나올 수 있도록 만들어줍니다.
for(let i = 0; i < menuButtons.length; i++){
menuButtons[i].addEventListener("click",function(event){
const btn = event.target;
const menuName = btn.innerText;
menuCart.push(menuName);
resultDiv.innerText = `>>[${menuCart}]이 주문되었습니다.`;
});
'JavaScript' 카테고리의 다른 글
JavaScript : 아이디 중복확인 (indexOF의 등장) (0) | 2023.11.27 |
---|---|
javascript 자식 창에서 부모 창에 데이터 가져오기 (0) | 2023.11.27 |
JavaScript 기본개념(3) 상속과 상속의 실습예제 (0) | 2023.11.23 |
JavaScript 기본개념(2) 연산자의 종류 (0) | 2023.11.23 |
JavaScript의 간단 정리와 출력 (0) | 2023.11.22 |
댓글