
<input>태그 작성type="text"placeholder="텍스트를 입력하세요"<button>Log In</button><div>로 묶어주고, id="login-form"으로 작성input과 button 요소를 js에서 손쉽게 찾기 위함이다input과 button 요소를 담을 변수 선언const loginInput = document.querySelector("#login-form input");
const loginButton = document.querySelector("#login-form button");
// document안의 id가 login-form인 요소인 곳에서 input과 button을 찾음
.
.
//login-form에서 input과 button을 가져오는 또다른 방법!!
const loginForm = document.getElementById("login-form"); //=== const loginForm = document.querySelector("#login-form");
const loginInput = loginForm.querySelector("input");
const loginButton = loginForm.querySelector("button");
addEventListener 실행loginButton.addEventListener("click",handleBtnClick);
addEventListener 실행될 때 실행될 함수 만들기function handleBtnClick(){
//input객체보기 console.dir(loginInput);
//input에 작성된 글을 보기위해 value라는 property 가져오기
console.log(loginInput.value);
console.log("click!!!");
}
loginInput.value를 username변수에 담아 조건문 활용.lengthfunction handleBtnClick(){
const username = loginInput.value;
if(username ===""){
alert("please write your name");
} else if (username.length > 15 ){
alert("your name is too long");
}
}
<form>태그를 활용하여 유효성검사 구현 (권장) <form id="login-form">
<input required maxlength="15" type="text" placeholder="what is your name?" />
<input type="submit" value="Login" />
</form>
required 속성 : 서버로 제출되기 전 반드시 입력해야하는 필드로 명시하기
- 위 속성이 제대로 동작하기 위해서
type의 속성값으로 다음과 같다
checkbox, date, email, file, number, password, pickers, radio, search, tel, text, urlrequired속성은 불리언(boolean)이다.
- boolean은 해당 속성을 명시하지 않으면 자동으로 false값을 가지게 되며, 명시하면 자동으로 true값을 가짐
maxlength="15" :최대 입력 길이 15로 설정input태그의 속성으로 submit을 넣었기때문에 더이상 button의 클릭여부가 필요없음loginForm.addEventListener("submit", onLoginSubmit);에서 onLoginSubmit()이렇게 추가하지 않음()은 함수를 "즉시" 실행한다는 뜻임 하지만 바로 실행하는걸 원하지 않음 왜냐? 이벤트가 일어나면 실행하길 원하기 때문() 실행하게 된다면 한번만실행하고 끝나게됨 그럼 이벤트가 발생할 때마다 실행이 어려워지기 때문에 JS에게 실행을 맡기는것임!!!!argument를 통해 전달해줌방금 일어난 event 객체 확인하는 방법 예제
// 인자의 이름은 아무거나!! funtion onLoginSubmit(tomato) { console.log(tomato);// 결과 : SubmitEvent{..방금 실행된 event 정보들...}
- 그리고 event 객체 안에 있는
preventDefult()를 호출하면 브라우저의 기본동작을 막아줄 수 있음
1) CSS 이용하기
.hidden{ display:none;}function onLoginSubmit (e){
e.preventDefault();
const username = loginInput.value;
loginForm.classList.add("hidden");
console.log(username);
form은 사라지지만 username은 콘솔에 찍힘2)form이 사라지면 HTML에 새로 추가한 요소가 보여지게 하기
h1태그를 사용하며 class는 기본값으로 class="hidden" 작성h1에 id="greeting" 추가하여 JS에서 가져오기 const greeting = document.querySelector("#greeting");username을 h1 안에 넣어서 유저의 이름을 보여줄 것greeting.innerText="Hello" + usernameh1에 기본적으로 있는 class="hidden" 지우기 위해greeting.classList.remove("hidden") 추가setItem : local storage에 정보를 저장할 수 있음localStorage.setItem("hidden", username); 이렇게하면 key : hidden , value: username되는거임getItem : 저장한 값을 불러올 수 있음localStorage.getItem("hidden") 결과: "username"removeItem :저장된 값 삭제하기localStorage.removeItem("hidden") 결과 : undefinded , 로컬스토리지엔 삭제되었음localStorage.setItem(USERNAME_KEY, username);1) 유저네임이 저장되어 있는지 확인하기
localStorage.getItem("USERNAME_KEY");
vlaue를 보여주고 없다면 null을 보여줌2) 로컬스토리지에 저장된 키의 값을 저장할 변수 만들기
const savedUsername = localStorage.getItem(USERNAME_KEY);
3) savedUsername의 유무 코드 작성
if(savedUsername === null ){
//show the form
} else {
//show the greetings(h1)
}
6) html 파일에서 <form>태그에도 class="hidden"을 기본값으로 추가해주기
5) 완성 코드
const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
const greeting = document.querySelector("#greeting");
//string만 포함된 변수는 대문자로 표기, string을 저장하고 싶을 떄 대문자 변수 사용함
const HIDDEN_CLASSNAME = "hidden";
const USERNAME_KEY="username";
//1-3.이벤트 발생시 실행함수
function onLoginSubmit(e){
//브라우저의 기본동작을 막기:새로고침 등
//1-4. 새로고침 막기
e.preventDefault();
//1-5. form에 hidden 추가
loginForm.classList.add(HIDDEN_CLASSNAME);
//1-6. 받은 유저네임을 로컬스토리지에 키와 값으로 저장하기
const username = loginInput.value;
localStorage.setItem(USERNAME_KEY, username);
// === greeting.innerText ="Hello " + username;
//1-7. 유저네임을 보여줄 함수 실행
paintGreetings(username);
console.log(username);
}
//submit은 엔터나 버튼을 누를 때 발생
function paintGreetings (username){
//1-8 hidden 클래스 제거하여 요소 보여주기
greeting.classList.remove(HIDDEN_CLASSNAME);
greeting.innerText= `Hello ${username}`;
}
//1. 로컬스토리지의 유저네임 유무 확인
const savedUsername = localStorage.getItem(USERNAME_KEY);
if(savedUsername === null){
//1-1. class에서 hidden 제거되며 form이 보여짐
loginForm.classList.remove(HIDDEN_CLASSNAME);
// 1-2. form에 이벤트가 발생하면 onLoginSubmit 함수 실행
loginForm.addEventListener("submit", onLoginSubmit);
}else {
// greeting.innerText= `Hello ${username}`;
//greeting.classList.remove(HIDDEN_CLASSNAME);
paintGreetings (savedUsername);
}