• 반복되는 string은 변수로 저장
  • Username을 기억해두고 새로고침해도 사라지지 않도록 저장하기
const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
const greeting = document.querySelector("#greeting");

const HIDDEN_CLASSNAME = "hidden"; //string만 포함된 변수는 대문자로 표기
const USERNAME_KEY = "username";

function onLoginSubmit(event){
    const userNameType = loginInput.value;
    event.preventDefault(); //새로고침되는 기본 동작을 막음
    loginForm.classList.add(HIDDEN_CLASSNAME); //로그인 폼 클래스리스트에 hidden클래스 추가해서 가리기
    localStorage.setItem(USERNAME_KEY,userNameType); //유저이름 저장하기
    paintGreetings(userNameType); //함수호출
}

function paintGreetings(){
    const username = localStorage.getItem(USERNAME_KEY); //저장된 유저이름 찾기
    greeting.innerText = `Hello ${username}`; //지금 상황에서 존재하는건 savedUsername,greeting에 텍스트 추가
    greeting.classList.remove(HIDDEN_CLASSNAME); 
} //함수를 호출하는 위치에 따라 유저 정보는 다른 곳에서 옴

const savedUsername = localStorage.getItem(USERNAME_KEY); //키로부터 데이터 읽기

if (savedUsername === null){
    // form을 표시
    loginForm.classList.remove(HIDDEN_CLASSNAME); //localStorage에 유저정보가 없으면 form의 submit을 기다림
    loginForm.addEventListener("submit",onLoginSubmit);
} else {
    //greeting을 표시
    paintGreetings(); //localStorage에 유저정보가 있으면 그곳에서 정보를 받아옴
}
const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
const greeting = document.querySelector("#greeting");

const HIDDEN_CLASSNAME = "hidden"; //string만 포함된 변수는 대문자로 표기
const USERNAME_KEY = "username";

function onLoginSubmit(event){
    event.preventDefault(); //새로고침되는 기본 동작을 막음
    loginForm.classList.add(HIDDEN_CLASSNAME); //로그인 폼 클래스리스트에 hidden클래스 추가해서 가리기
    const username = loginInput.value; //input으로부터 유저정보 받기 
    localStorage.setItem(USERNAME_KEY,username); //키에 데이터 쓰기
    paintGreetings(username); //input에서 받은 유저정보를 가진 함수 호출
}

function paintGreetings(username){
    greeting.innerText = `Hello ${username}`; //greeting에 텍스트 추가
    greeting.classList.remove(HIDDEN_CLASSNAME); 
} //함수를 호출하는 위치에 따라 유저 정보는 다른 곳에서 옴

const savedUsername = localStorage.getItem(USERNAME_KEY); //키로부터 데이터 읽기

if (savedUsername === null){
    // form을 표시
    loginForm.classList.remove(HIDDEN_CLASSNAME); //localStorage에 유저정보가 없으면 form의 submit을 기다림
    loginForm.addEventListener("submit",onLoginSubmit);
} else {
    //greeting을 표시
    paintGreetings(savedUsername); //localStorage에 유저정보가 있으면 그곳에서 정보를 받아옴
}

둘다 가능함 

'JavaScript' 카테고리의 다른 글

#5.1 Timeouts and Dates  (0) 2023.02.10
#5.0 Intervals  (2) 2023.02.10
#4.3 Events part Two  (0) 2023.02.08
#4.2 Events  (0) 2023.02.06
#4.1 Form Submission  (1) 2023.02.06
  •  addEventListener안에 있는 함수는 직접 실행하지 않음, 브라우저가 실행시켜 주는 것, 실행하면서 event에 관한 정보도 담아줌
  • 정보를 담아줄수 있는 파라미터를 만들고, 그 파라미터는 preventDefault처럼 몇가지 함수도 실행가능함
const link = document.querySelector("a");

function onLinkClick(event){
    event.preventDefault();
    //링크를 클릭하면 해당사이트로 이동하는 기본동작을 막음
    console.dir(event);
}

link.addEventListener("click",onLinkClick);

'JavaScript' 카테고리의 다른 글

#5.0 Intervals  (2) 2023.02.10
#4.6 Loading Username  (1) 2023.02.10
#4.2 Events  (0) 2023.02.06
#4.1 Form Submission  (1) 2023.02.06
#4.0 Input Values  (3) 2023.02.06
  •  모든 EventListener function의 첫번째 파라미터는 항상 방금 발생한 event들에 관한 정보임
  • submit되면 페이지 전체가 새로고침되는 기본 동작 막기
  • 기본행동 : 어떤 함수에 대해 브라우저가 기본적으로 수행하는 동작
const loginForm = document.querySelector(".login-form");
const loginInput = document.querySelector(".login-form input");

function onLoginSubmit(event){
    //함수의 파라미터를 명시해주면(어떤이름이든 상관x) 자바스크립트에서 event를 채워줌
    event.preventDefault(); // 어떤 이벤트의 기본 행동이 발생하지 않게 막는 것
    //form을 submit하면 브라우저가 기본적으로 새로고침하는 것을 막음
    console.log(loginInput.value);
}

loginForm.addEventListener("submit",onLoginSubmit);
//submit이벤트가 발생했을 때 onLoginSubmit함수를 호출하고, event를 파라미터로줌

 

'JavaScript' 카테고리의 다른 글

#4.6 Loading Username  (1) 2023.02.10
#4.3 Events part Two  (0) 2023.02.08
#4.1 Form Submission  (1) 2023.02.06
#4.0 Input Values  (3) 2023.02.06
#3.8 CSS in Javascript part Three  (2) 2023.02.06
  • js로 username의 유효성 검사
function LoginButtonClick(){
    const username = loninInput.value;
    if(username === ""){ //username이 공백이라면
        alert("이름을 입력해 주세요.");
    }else if(username.length > 15){ //username의 길이가 15를 넘는다면
        alert("이름이 너무 길어요"); 
    }
}
  • html을 활용해서 username의 유효성 검사 -> input의 유효성을 검사하려면 input은 form안에 위치해야 함
    • form안에서 enter를 누르고 input이 더이상 존재하지 않으면 submit
    • form안에 있는 버튼을 눌렀을 때도 form은 자동으로 submit
    • -> 더 이상 click에 신경쓸 필요x
    • ->우리는 엔터와 버튼이 눌릴 때마다 페이지 전체가 submit되어 새로고침되는 것을 원하지 x
<body>
    <form class="login-form">
        <input 
        required
        maxlength="15"
        type="text"
        placeholder="What is your name?" />
        <button>Log In</button>
    </form>
<script src="app.js"></script>
</body>
function LoginButtonClick(){
    const username = loninInput.value; //값이 잘 들어가 있나 확인할라고 함
    console.log(username);
}

loninButton.addEventListener("click",LoginButtonClick);

'JavaScript' 카테고리의 다른 글

#4.3 Events part Two  (0) 2023.02.08
#4.2 Events  (0) 2023.02.06
#4.0 Input Values  (3) 2023.02.06
#3.8 CSS in Javascript part Three  (2) 2023.02.06
#3.7 CSS in Javascript part Two  (1) 2023.02.04
  • 요소 찾기
const loginForm = document.getElementById("login-form");
//html에서 login-form(html element)을 찾음
const loninInput = loginForm.querySelector("input");
const loninButton = loginForm.querySelector("button");
  • 로그인버튼 눌러서 값 가져오기
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Hello from HTML!</title>
</head>
<body>
    <div class="login-form">
        <input type="text" placeholder="What is your name?" />
        <button>Log In</button>
    </div>
<script src="app.js"></script>
</body>
</html>
const loninInput = document.querySelector(".login-form input"); //왜 .으로 해야 에러가 안뜨지
const loninButton = document.querySelector(".login-form button");

function LoginButtonClick(){
    console.log(loninInput.value); //value값 받아오고 콘솔에 출력
}

loninButton.addEventListener("click",LoginButtonClick);

'JavaScript' 카테고리의 다른 글

#4.2 Events  (0) 2023.02.06
#4.1 Form Submission  (1) 2023.02.06
#3.8 CSS in Javascript part Three  (2) 2023.02.06
#3.7 CSS in Javascript part Two  (1) 2023.02.04
#3.6 CSS in Javascript  (0) 2023.02.04
  • classList로 클래스 이름을 바꾸는 것이 아닌 classname 목록들 관리하기
const h1 = document.querySelector(".hello h1");

function mouseClick(){
    const clickedClass = "clicked";
    if(h1.classList.contains(clickedClass)){ //classList가 clickedClass를 포함하고 있다면
        h1.classList.remove(clickedClass); //classList에 clickedClass를 제거
    }else{ //포함하고 있지 않다면
        h1.classList.add(clickedClass);//classList에 clickedClass를 추가
    }
}

h1.addEventListener("click",mouseClick);
  • foggle funcion ->위 코드랑 완전 동일한 기능, h1의 classList에 clicked가 있는지 확인을 한 후 있으면 제거 없으면 추가
const h1 = document.querySelector(".hello h1");

function mouseClick(){
    h1.classList.toggle("clicked"); //clicked한 번만 나오기 때문에 const로 변수 만들필요x
}

h1.addEventListener("click",mouseClick);

'JavaScript' 카테고리의 다른 글

#4.1 Form Submission  (1) 2023.02.06
#4.0 Input Values  (3) 2023.02.06
#3.7 CSS in Javascript part Two  (1) 2023.02.04
#3.6 CSS in Javascript  (0) 2023.02.04
#3.5 More Events  (2) 2023.02.03
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css"> //css파일 연결
    <title>Hello from HTML!</title>
</head>
<body>
    <div class="hello">
        <h1 class="sexy-font">Click Me!</h1>
    </div>
    
    <script src="app.js"></script> //js파일 연결
</body>
</html>
body{
    background-color: beige;
}

h1{
    color: blue;
    transition: color.5s ease-in-out;
}

.clicked{ /*clicked라는 이름의 클래스 생성*/
    color: tomato;
}

.sexy-font{
    font-family: 'Courier New', Courier, monospace;
}
const h1 = document.querySelector(".hello h1");

function mouseClick(){
    const clickedClass = "clicked sexy-font"; //string을 변수에 저장해서 이름 잘못쳐서 에러날수 있는거 방지
    if(h1.className === clickedClass){ //className이 getter이자 setter임
        h1.className = "";
    }else{
        h1.className = clickedClass;
    }
}

h1.addEventListener("click",mouseClick);
  • 마우스를 클릭하면 h1의 className이 clickedClass(할당된)라는 Class가 생성됨
  • 한번 더 클릭하면 h1의 className은 공백이 됨
  • 근데 애초에 h1에 sexy-font라는 class가 존재한다면 클릭이벤트를 발생했을때 sexy-font를 없애고 clicked로만 냅다 할당해버림 -> 그래서 sexy-font의 css는 무시됨
  • 그래서 clickedClass = "clicked sexy-font"라고 써준거

'JavaScript' 카테고리의 다른 글

#4.0 Input Values  (3) 2023.02.06
#3.8 CSS in Javascript part Three  (2) 2023.02.06
#3.6 CSS in Javascript  (0) 2023.02.04
#3.5 More Events  (2) 2023.02.03
#3.4 Events part Two  (0) 2023.02.03
  •  조건문으로 색 바꾸기
const h1 = document.querySelector(".hello h1");

function mouseClick(){
    const currentColor = h1.style.color;
    let newColor;
    if(currentColor === "blue"){
        newColor = "tomato";
    }else{
        newColor = "blue";
    }
    h1.style.color = newColor;
}

h1.addEventListener("click",mouseClick);
  • 핵심은 요소를 찾고, 이벤트 추가하고, 함수로 반응만들기

'JavaScript' 카테고리의 다른 글

#3.8 CSS in Javascript part Three  (2) 2023.02.06
#3.7 CSS in Javascript part Two  (1) 2023.02.04
#3.5 More Events  (2) 2023.02.03
#3.4 Events part Two  (0) 2023.02.03
#3.3 Events  (1) 2023.02.03

+ Recent posts