HTML, CSS, JavaScript를 학습한 후 HTML, CSS를 활용해 로그인 페이지, SNS 피드 페이지 레이아웃을 잡고, JavaScript/DOM으로 로그인, 댓글 입력/삭제 기능을 구현해 보았다.
1) 로그인 페이지 레이아웃 (HTML, CSS)
2) 아이디, 비밀번호 유효성 검사 기능
3) input값 입력시 버튼 스타일 변화
4) 로그인 시 main 페이지로 이동
"use strict";
const inputInfo = document.getElementsByClassName("inputGroup")[0];
const button = document.getElementById("inputButton");
function handleButton(buttonValid) {
if(buttonValid) {
button.disabled = false;
} else {
button.disabled = true;
}
if (window.event.keyCode === 13) {
goToMain();
}
}
function checkId(value) {
if (value.length > 0) {
return true;
} else {
return false;
}
}
function checkPw(value) {
if (value.length > 0) {
return true;
} else {
return false;
}
}
function handleInput() {
const userId = document.getElementById("userInfo").value;
const userPw = document.getElementById("userPw").value;
const isValidId = checkId(userId); //T/F를 받게 됨
const isValidPw = checkPw(userPw);
if (isValidId && isValidPw) {
handleButton(true);
} else {
handleButton(false);
}
}
function goToMain() {
alert("환영합니다!:)");
location.replace('http://127.0.0.1:5500/main/main.html')
}
const init = () => {
inputInfo.addEventListener("input", handleInput);
button.addEventListener("click", goToMain);
};
init();
getElementsByClassName
은 class name이 같은 중복 값을 가져올 수 있다.getElementById
에서 Id는 한 개만 존재하며, DOM 요소를 가져온다. getElementBy~
는 필요한 요소를 앱 브라우저에서 전체에서 찾는다. (Id는 ID로, TagName은 tag name으로..)document.querySelector("#main > .loginBtn > li")
inputInfo.addEventListener("input", handleInput);
input 요소가 2개(아이디, 비밀번호)인데, 이벤트 핸들러는 하나 뿐이다.
button.disabled = !buttonValid [? true : false;]
([]생략 가능)inputInfo.addEventListener("input", handleInput함수명);
handleInput()
이 아닌 handleInput
과 같이 함수명만 넘긴다. ()
를 붙이면 함수를 호출하게 된다. 따라서 이벤트 핸들러 함수에 ()를 붙이면 이벤트가 실행되기도 전에 해당 함수가 바로 실행되어 버린다. 1) 메인 페이지(navigation bar, feed, recommendation, footer) 레이아웃 (HTML, CSS)
2) 댓글 입력/게시 기능
3) 댓글 삭제 기능
"use strict";
const replyInput = document.getElementById("replyInput");
const replyButton = document.getElementById("replyButton");
function addReply(value) {
const replyList = document.getElementById("#replyList");
const newLists = document.createElement("li");
const newContent = `<span class="name">kayoung</sapn>
<span class="description">${value}</span>
<span class="delete">x</span>`
newLists.innerHTML = newContent;
deleteEvent(newLists);
replyList.appendChild(newLists);
replyInput.value = "";
}
function deleteEvent(newLists) {
const deletebutton = document.querySelector(".delete");
deletebutton.addEventListener("click", () => newLists.remove())
}
function validateReply() {
const replyValue = replyInput.value;
if(replyValue.length > 0) {
addReply(replyValue);
} else {
alert("댓글을 입력해주세요.")
}
}
function init() {
replyButton.addEventListener("click", validateReply);
}
init();
function addReply(replyValue) {
const newReply = document.createElement("li");
const newName = document.createElement("span");
const newContent = document.createElement("span");
const deleteBtn = document.createElement("span");
newName.classList.add("name");
deleteBtn.classList.add("delete");
newName.innerText = "kayoung";
newContent.innerText = replyValue;
deleteBtn.innerText = "x";
deleteBtn.addEventListener("click", () => newReply.remove());
newReply.appendChild(newName);
newReply.appendChild(newContent);
newReply.appendChild(deleteBtn);
replyList.appendChild(newReply);
replyInput.value="";
}
location.replace()
또는 location.href
를 쓴다.