<body>
<form class="hidden" id="login-form">
<input type="text" maxlength="4" placeholder="What is your name?" required/>
<button>Log in</button>
</form>
<h1 id="greeting" class="hidden"></h1>
<script src="app.js"></script>
</body>
const loginForm = document.querySelector("#login-form")
const loginInput = document.querySelector("#login-form input");
const loginButton = document.querySelector("#login-form Button");
const HIDDEN_CLASSNAME = "hidden"
const USERNAME_KEY = "username"
function onLoginSubmit(event){
event.preventDefault();
loginForm.classList.add(HIDDEN_CLASSNAME);
const username = loginInput.value;
localStorage.setItem(USERNAME_KEY, username)
paintGreeting(username);
}
.hidden {
display: none;
}
간단한 로그인 기능을 구현하던 도중 의문이 들었다. 초보 of 초보자인 내 생각으로는 저 form이 사라지게 된되면 value값을 읽어올 수 있을까 하는 생각이 들었고 그래서 display: none
이 DOM에서 작동되어지는 방식을 찾아보게 되었다.
하지만 본격적으로 작동방식을 찾아보기 전에 DOM에 대해 알고 있어야 했다.
이렇게 Render Tree가 생성 될 때,
display: none
은 화면상 어떠한 공간도 차지하지 않기 때문에 Render Tree에 포함되지 않아서 브라우저상(사용자 눈)에는 보이지 않는다.
하지만 DOM Tree에서는 사라지지 않기 때문에!
display: none
으로 사라진 loginform은 DOM Tree에 그대로 남아있게 되므로 form안에 value값도 DOM에 여전히 존재하고 있는 것이다.
const loginForm = document.querySelector("#login-form")
visibility: hidden
과의 차이도 알게 되었다.
마찬가지로 사용자의 눈에 보이지 않는 것은 동일하다.
하지만, display: none
와는 달리 visibility: hidden
은 공간을 차지하고 있기 때문에 Render Tree에 포함된다는 것이 차이점이다.
참고한 사이트:
https://medium.com/the-crazy-coder/display-none-and-dom-e049b69164cb