<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
변수에 담아 조건문 활용.length
function 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, url
required
속성은 불리언(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" + username
h1
에 기본적으로 있는 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);
}