<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>counter</title>
</head>
<body>
    <div id="counter">0</div>
    <button id="increase">+</button>
    <button id="decrease">-</button>
    <script>
        const $counter = document.getElementById('counter-x');
        const $increase = document.getElementById('increase');
        const $decrease = document.getElementById('decrease');

        let num = 0;
        const render = function () {
            $counter.innerHTML = num;
        };

        $increase.onclick = function () {
            num ++;
            console.log('increase 버튼 클릭', num);
            render();
        };

        $decrease.onclick = function () {
            num --;
            console.log('decrease 버튼 클릭', num);
            render();
        };
    </script>
</body>
</html>

이러한 단순한 숫자가 더해지거나 빼지는 코드가 있다 이 코드를 돌리면 +버튼이나 -버튼을 누르면 에러가 발생하는데 이제 이 에러를 분석하자.

개발자도구의 console을 열어보면 

Uncaught TypeError: Cannot set properties of null (setting 'innerHTML')
    at render (java.html:19:32)
    at $increase.onclick (java.html:25:13)

보면 에러가 발생하기는 했으나 html파일에 포함된 자바스크립트가 일부 실행된것은 확인했다.

에러 정보에보면 오른쪽에 에러발생위치를 나타내는 링크를 클릭해보면 자바스크립트 코드를 디버깅할수있는 source패널로 이동한다.

java.html:19

 

에러가 발생한 위치는

const render = function () {
            $counter.innerHTML = num;
        };

그리고 에러에 보면 Uncaught TypeError: Cannot set properties of null (setting 'innerHTML')라는 에러 정보가 표시되는데 이때 $counter변수의 값이 null인지 확인해보고 null이면 그 이유를 알아내서 에러가 발생한 원인을 제거해보자.

발생한 코드의 라인번호 클릭 후 다시 -버튼을 눌러보면 디버깅 모드로 들어가는데 이때 $counter에 커서를 두면 이것의 변수가 나오는데 이 값은 null 이였다. 

원인은 

const $counter = document.getElementById('counter-x');

이 부분에서 $counter의 변수에 값을 할당할때 html요소의 아이디를 counter-x라고 잘못 지정한것이다.

이 부분을 counter로 다시 수정하면 제대로 동작한다.

 

+ Recent posts