querySelecotr()
와 getElementById
차이점
querySelecotr()
= 대상이 id인지 명확히 해줘야함
getElementById
= 이미 id를 찾고있다는걸 알기 때매 명확히 안해도 됨
const longinForm=document.getElementById("#login-form");
const loginInput = longinForm.querySelector("input");
const longinButton = longinForm.querySelector("button");
=둘은 같다=
const loginInput=document.querySelector("#login-form input");
const loginButton=document.querySelector("#login-form button");
-last code-
const loginInput=document.querySelector("#login-form input");
const loginButton=document.querySelector("#login-form button");
function onLoginBtnClick()
{
console.dir(loginInput.value);
}
loginButton.addEventListener("click",onLoginBtnClick)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>Momentum App</title>
</head>
<body>
<div id="login-form">
<input type="text" placeholder="What is your name?"/>
<button>Log In</button>
</div>
<script src="app.js"></script>
</body>
</html>
const loginInput=document.querySelector("#login-form input");
const loginButton=document.querySelector("#login-form button");
function onLoginBtnClick()
{
const username = loginInput.value;
if(username==="")
{
alert("Please write your name");
}
else if(username.length>15)
{
alert("Your name is too long.");
}
}
loginButton.addEventListener("click",onLoginBtnClick)
<body>
<form id="login-form">
<input required maxlength="15" type="text" placeholder="What is your name?"/>
<button>Log In</button>
</form>
<script src="app.js"></script>
</body>
html에 이렇게 아예 maxlength를 설정할 수 있다
required
처럼 정해놓는거는 꼭 <form></form>
속에 있어야 한다 div
아님!
-last code-
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>Momentum App</title>
</head>
<body>
<form id="login-form">
<input required maxlength="15" type="text" placeholder="What is your name?"/>
<input type="submit" value="Log In"/>
</form>
<script src="app.js"></script>
</body>
</html>
<button>Log In</button>
-> <input type="submit" value="Log In"/>
으로 고치면
p.js:10 Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')
at app.js:10:13
(
이러는 에러가 뜬다 이걸 다음 강의에서 고치신다함
const loginInput=document.querySelector("#login-form input");
const loginForm = document.querySelector("#login-form");
function onLoginSubmit()
{
const username = loginInput.value;
console.log(username);
}
loginForm.addEventListener("submit",onLoginSubmit);
ㄴ submit event는 잘 하고 있지만 새로고침 부분에서 아직도 문제가 있음
const loginInput=document.querySelector("#login-form input");
const loginForm = document.querySelector("#login-form");
function onLoginSubmit(tomato)
{
tomato.preventDefault();
console.log(tomato);
}
loginForm.addEventListener("submit",onLoginSubmit);
//we don't do () browser press function automatically
ㄴ function이 하나의 argument(tomato)를 받도록 하고 그걸 JS에 넘겨주고 있음
-last code-
const loginInput=document.querySelector("#login-form input");
const loginForm = document.querySelector("#login-form");
function onLoginSubmit(event)
{
event.preventDefault(); //browser의 기본 동작을 막아줌
console.log(loginInput.value);
}
loginForm.addEventListener("submit",onLoginSubmit);
//we don't do () browser press function automatically
preventDefault()
- browser의 기본 동작을 막아줌
const loginInput=document.querySelector("#login-form input");
const loginForm = document.querySelector("#login-form");
const link=document.querySelector("a");
function onLoginSubmit(event)
{
event.preventDefault(); //browser의 기본 동작을 막아줌
console.log(loginInput.value);
}
loginForm.addEventListener("submit",onLoginSubmit);
//we don't do () browser press function automatically
function handleLinkClick()
{
alert("clicked!");
}
link.addEventListener("click",handleLinkClick);
ㄴ 로그인 버튼 누르면 alert뜨고 링크 페이지로 이동시켜주는 코드
function handleLinkClick(event)
{
event.preventDefault();
console.dir(event);
}
event.preventDefault();
기본 동작을 막아주는 함수를 넣어주면 링크 페이지로 넘어가지 않는다
<form id="login-form" class="hidden">
.hidden{
display: none;
}
추가 했는데 왜 나는 안 사라지냐?!!?
const loginInput=document.querySelector("#login-form input");
const loginForm = document.querySelector("#login-form");
const greeting = document.querySelector("#greeting");
const HIDDEN_CLASSNAME="hidden";
function onLoginSubmit(event)
{
event.preventDefault(); //browser의 기본 동작을 막아줌
console.log(loginInput.value);
const username=loginInput.value;
loginForm.classList.add("hidden");
console.log(username);
greeting.classList.remove(HIDDEN_CLASSNAME);
}
greeting.innerText="Hello "+username;
loginForm.addEventListener("submit",onLoginSubmit);
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>Momentum App</title>
</head>
<body>
<form id="login-form">
<input required maxlength="15" type="text" placeholder="What is your name?"/>
<input type="submit" value="Log In"/>
</form>
<h1 id="greeting" class="hidden"></h1>
<a href="https://nomadcoders.co">Go to courses</a>
<script src="app.js"></script>
</body>
</html>
.hidden{
display: none;
}
왜 난 안되냐고 !!
이 둘은 같은 방법이다
localStorage.setItem("username") //local storage에 저장
localStorage.removeItem("username") //local storage 삭제
localStorage.getItem("username") //local storage에 저장한 값 불러내기
값이 저장되는 것을 볼 수 있다
-last code-
const loginInput=document.querySelector("#login-form input");
const loginForm = document.querySelector("#login-form");
const greeting = document.querySelector("#greeting");
const HIDDEN_CLASSNAME="hidden";
function onLoginSubmit(event)
{
event.preventDefault(); //browser의 기본 동작을 막아줌
loginForm.classList.add(HIDDEN_CLASSNAME);
const username=loginInput.value;
localStorage.setItem("username",username);
greeting.innerText="Hello "+username;
greeting.classList.remove(HIDDEN_CLASSNAME);
}
loginForm.addEventListener("submit",onLoginSubmit);
const loginInput=document.querySelector("#login-form input");
const loginForm = document.querySelector("#login-form");
const greeting = document.querySelector("#greeting");
const HIDDEN_CLASSNAME="hidden";
const USERNAME_KEY="username";
function onLoginSubmit(event)
{
event.preventDefault(); //browser의 기본 동작을 막아줌
loginForm.classList.add(HIDDEN_CLASSNAME);
const username=loginInput.value;
localStorage.setItem(USERNAME_KEY,username);
greeting.innerText="Hello "+username;
greeting.classList.remove(HIDDEN_CLASSNAME);
}
const savedUsername=localStorage.getItem(USERNAME_KEY);
//유저 정보가 local storage에 없다면 null을 반환하자
if(savedUsername===null){
//savedUsername 값이 null 이라면 form의 hidden class명을 지워주자
loginForm.classList.remove(HIDDEN_CLASSNAME);
loginForm.addEventListener("submit",onLoginSubmit);
}
else{
//show the greetings
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>Momentum App</title>
</head>
<body>
<form class="hidden" id="login-form">
<input required maxlength="15" type="text" placeholder="What is your name?"/>
<input type="submit" value="Log In"/>
</form>
<h1 id="greeting" class="hidden"></h1>
<a href="https://nomadcoders.co">Go to courses</a>
<script src="app.js"></script>
</body>
</html>
난 왜 log in 창이 안뜨는 것인가,..
이렇게 되어야되는데
난 <form class="hidden" ...>
이 안 없어짐..
짜증!!!!!난다@!@!@!!@#!!
-last code-
const loginInput=document.querySelector("#login-form input");
const loginForm = document.querySelector("#login-form");
const greeting = document.querySelector("#greeting");
const HIDDEN_CLASSNAME="hidden";
const USERNAME_KEY="username";
function onLoginSubmit(event)
{
event.preventDefault(); //browser의 기본 동작을 막아줌
loginForm.classList.add(HIDDEN_CLASSNAME);
const username=loginInput.value;
localStorage.setItem(USERNAME_KEY,username);
paintGreetings(username);
}
function paintGreetings(username)
{
greeting.innerText="Hello "+username;
greeting.classList.remove(HIDDEN_CLASSNAME);
}
const savedUsername=localStorage.getItem(USERNAME_KEY);
//유저 정보가 local storage에 없다면 null을 반환하자
if(savedUsername===null){
//savedUsername 값이 null 이라면 form의 hidden class명을 지워주자
loginForm.classList.remove(HIDDEN_CLASSNAME);
loginForm.addEventListener("submit",onLoginSubmit);
}
else{
paintGreetings(savedUsername);
}
ㄴ 헤헤 성공했드아
코드에 문제는 아닌거 같고 local storage에 초기화를 안해서 그런듯하다..ㅎㅎ
const loginInput=document.querySelector("#login-form input");
const loginForm = document.querySelector("#login-form");
const greeting = document.querySelector("#greeting");
const HIDDEN_CLASSNAME="hidden";
const USERNAME_KEY="username";
function onLoginSubmit(event)
{
event.preventDefault(); //browser의 기본 동작을 막아줌
loginForm.classList.add(HIDDEN_CLASSNAME); //form 을 다신 숨겨준다
const username=loginInput.value; //loginInput.value을 username이라는 변수로 저장
localStorage.setItem(USERNAME_KEY,username);//username 값을 username이라는 key와 함께 local storage에 저장
paintGreetings(username); //paintGreetings 함수 호출
}
function paintGreetings(username)
{
greeting.innerText="Hello "+username;//비어있는 h1 요소 안에 "Hello "+username라는 text추가
greeting.classList.remove(HIDDEN_CLASSNAME);//h1요소로부터 hidden이란느 클래스 제거
}
const savedUsername=localStorage.getItem(USERNAME_KEY);
//유저 정보가 local storage에 없다면 null을 반환하자
if(savedUsername===null){
//savedUsername 값이 null 이라면 form의 hidden class를 지워서 form이 화면에 표시되게 해줌
loginForm.classList.remove(HIDDEN_CLASSNAME);
loginForm.addEventListener("submit",onLoginSubmit);
}
else{
paintGreetings(savedUsername); //화면에 출력
}
마지막 강의는 복습 강의였드아
나두 한 줄씩 주석 달아주었드아