
   <form action="">
      <div id="feedbackWrap">
        <div id="feedback">피드백이 들어가는 부분</div>
      </div>
      <label for="username">사용자 이름 : </label>
      <!-- label 부분 눌러도  input이 깜빡거림 -->
      <input type="text" id="username">
      <label for="pw">비밀번호</label>
      <input type="password" id="pw">
      <input type="submit" id="LOG IN">
    
    </form>
<label>을 <input>요소와 연결하는 방법<input> 에 id 속성을 넣고, <label> 에 id 와 같은 값의 for 속성을 넣기.        <form action="">
            <div id="feedbackWrap">
                <div id="feedback"></div>
            </div>
            <label for="username">사용자 이름 : </label>
            <!-- label 부분 눌러도  input이 깜빡거림 -->
            <input type="text" id="username" onblur="checkN()">
            <label for="pw">비밀번호</label>
            <input type="password" id="pw">
            <input type="submit" id="LOG IN">
        </form>
    </div>
</body>
<script>
    function checkN(){
        const elName = document.getElementById('username');
        const elMsg = document.getElementById('feedback');
        if(elName.value.length < 5){ //요소, 입력내용, 글자 수
            elMsg.textContent = "이름이 너무 짧습니다."
        }
    }
</script>

<form action="">
            <div id="feedbackWrap">
                <div id="feedback"></div>
            </div>
            <label for="username">사용자 이름 : </label>
            <!-- label 부분 눌러도  input이 깜빡거림 -->
            <input type="text" id="username">
            <label for="pw">비밀번호</label>
            <input type="password" id="pw">
            <input type="submit" id="LOG IN">
        </form>
    </div>
</body>
<script>
    function checkN(){
        const elMsg = document.getElementById('feedback');
        if(elName.value.length < 5){ //요소, 입력내용, 글자 수
            elMsg.textContent = "이름이 너무 짧습니다."
        }
    }
    const elName = document.getElementById('username');
    elName.onblur = checkN;
<form action="">
            <div id="feedbackWrap">
                <div id="feedback"></div>
            </div>
            <label for="username">사용자 이름 : </label>
            <!-- label 부분 눌러도  input이 깜빡거림 -->
            <input type="text" id="username" onblur="checkN()">
            <label for="pw">비밀번호</label>
            <input type="password" id="pw">
            <input type="submit" id="LOG IN">
        </form>
    </div>
</body>
<script>
    function checkN() {
        const elMsg = document.getElementById('feedback');
        if (elName.value.length < 5) { //요소, 입력내용, 글자 수
            elMsg.textContent = "이름이 너무 짧습니다."
        }
    }
    const elName = document.getElementById('username');
    elName.addEventListener('blur', checkN, false);
addEventListener(type, listener);
addEventListener(type, listener, options);
addEventListener(type, listener, useCapture);
addEventListener('이벤트', 함수, 이벤트방식(보통은 생략))
<form action="">
            <div id="feedbackWrap">
                <div id="feedback"></div>
            </div>
            <label for="username">사용자 이름 : </label>
            <!-- label 부분 눌러도  input이 깜빡거림 -->
            <input type="text" id="username" onblur="checkN()">
            <label for="pw">비밀번호</label>
            <input type="password" id="pw">
            <input type="submit" id="LOG IN">
        </form>
    </div>
</body>
<script>
    function checkN() {
        const elMsg = document.getElementById('feedback');
        if (elName.value.length < 5) { //요소, 입력내용, 글자 수
            elMsg.textContent = "이름이 너무 짧습니다."
        }
    }
    const elName = document.getElementById('username');
if(elName.addEventListener){ //이벤트 리스너를 인식했을 때
    elName.addEventListener('blur', checkN);
}else{ //이벤트 리스너를 인식하지 못할때 대용으로 사용
elName.attachEvent('onblur',checkN);
}
</script>
<form action="">
            <div id="feedbackWrap">
                <div id="feedback"></div>
            </div>
            <label for="username">사용자 이름 : </label>
            <!-- label 부분 눌러도  input이 깜빡거림 -->
            <input type="text" id="username" onblur="checkN()">
            <label for="pw">비밀번호</label>
            <input type="password" id="pw">
            <input type="submit" id="LOG IN">
        </form>
    </div>
</body>
<script>
    const elName = document.getElementById('username');
    const elMsg = document.getElementById('feedback');
    let myName;
    function checkN(myName, minLength) {
        myName = elName.value;
        if (elName.value.length < minLength) { //요소, 입력내용, 글자 수
            elMsg.textContent = `${myName}님 이름은 
            ${minLength}글자 이상으로 써주세요.`;
        }
    }
elName.addEventListener('blur',function(){
    checkN(myName, 5)}
    );
</script>
<form action="">
            <div id="feedbackWrap">
                <div id="feedback"></div>
            </div>
            <label for="username">사용자 이름 : </label>
            <!-- label 부분 눌러도  input이 깜빡거림 -->
            <input type="text" id="username" onblur="checkN()">
            <label for="pw">비밀번호</label>
            <input type="password" id="pw">
            <input type="submit" id="LOG IN">
        </form>
    </div>
</body>
<script>
    const elName = document.getElementById('username');
    const elMsg = document.getElementById('feedback');
    let myName;
    function checkN(myName, minLength) {
        myName = elName.value;
        if (elName.value.length < minLength) { //요소, 입력내용, 글자 수
            elMsg.textContent = `${myName}님 이름은 
            ${minLength}글자 이상으로 써주세요.`;
        }
    }
elName.addEventListener('blur',function(){
    checkN(myName, 5)}
    );
function autoFocus(){
    elName.focus(); //elName에 포커스가 적용 됨. 
}
// autoFocus();
// window.autoFocus()와 같은 코드. 
window.addEventListener('load', autoFocus);
</script>
<form action="" id="formSignup">
            <label for="package">패키지를선택하세요 : </label>
            <select id="package">
                <option>=======선택=======</option>
                <option value="annual">1년 : 30,000원</option>
                <option value="monthly">1달 : 5,000원</option>
            </select>
            <div class="packageHint"></div>
            <input type="checkbox" id="terms" onclick="cb()">
            <label for="terms">사용권 계약에 동의합니다.</label>
            <div class="termsHint"></div>
            <input type="submit" value="다음 단계">
        </form>
    </div>
</body>
    <script>
        const elForm = document.querySelector('#formSignup'); //form 태그 전체
        const elPackage = document.querySelector('#package') //package부분(select)
        const elPackageHint = document.querySelector('.packageHint');
        const elTerms = document.querySelector('#terms');
        const elTermsHint = document.querySelector('.termsHint')
        function cb(){
            if(elTerms.checked == true){
                elTermsHint.textContent = "";
            }else{
                elTermsHint.textContent = "사용권 계약에 동의해 주세요"
            }
        }
     /*    elTerms.onclick = function(){
            if(elTerms.checked == true){
                elTermsHint.textContent = "";
            }
        } */
        function pHint(){
            let sel = elPackage.options[elPackage.selectedIndex].value;
            if(sel == "monthly"){
                elPackageHint.textContent = "다시 한번 생각해보세요";
            }else if(sel == "annual"){
                elPackageHint.textContent = "최선의 선택";
            }
            else{
                elPackageHint.textContent = "";
            }
        }
        function checkTerms(e){
            e.preventDefault(); //기본속성(화면을 reset함)을 prevent함
            if(!elTerms.checked){
                elTermsHint.textContent = "사용권 계약에 동의해 주세요"
            }else{
                elTermsHint.textContent = "";
            }
        }
        
        
        elPackage.addEventListener('change', pHint);
        elForm.addEventListener('submit', checkTerms);
    </script>
screenX : 전체 모니터 스크린에서의 x좌표 위치를 반환(모니터 기준)
screenY : 전체 모니터 스크린에서의 y좌표 위치를 반환(모니터 기준)
pageX : 브라우저 페이지에서의 x좌표 위치를 반환(전체 문서 기준 - 스크롤 화면 포함)
pageY : 브라우저 페이지에서의 Y좌표 위치를 반환(전체 문서 기준 - 스크롤 화면 포함)
clientX : 브라우저 페이지에서의 X좌표 위치를 반환하나 스크롤은 무시하고 해당 페이지의 상단을 0으로 측정(브라우저 화면 기준)
clientY : 브라우저 페이지에서의 Y좌표 위치를 반환하나 스크롤은 무시하고 해당 페이지의 상단을 0으로 측정(브라우저 화면 기준)
offsetX : 이벤트 대상 객체에서의 상대적 마우스 x좌표 위치를 반환(이벤트 대상이 기준)
offsetY : 이벤트 대상 객체에서의 상대적 마우스 y좌표 위치를 반환(이벤트 대상이 기준)