베이징덕
2021-04-16 19:11:15 작성 2021-05-01 15:47:56 수정됨
2
156

-


-

0
  • 답변 2

  • 김규성
    180
    2021-04-16 20:47:03


    <input type="button" id="target1" value="button1" />
    <input type="button" id="target2" value="button2" />
    <script>
        var t1 = document.getElementById('target1');
        var t2 = document.getElementById('target2');
        function btn_listener(event){
            switch(event.target.id){
                case 'target1':
                    alert(1);
                    break;
                case 'target2':
                    alert(2);
                    break;
            }
        }
        t1.addEventListener('click', btn_listener);
        t2.addEventListener('click', btn_listener);
    </script>


  • 엔지니어의꿈
    240
    2021-04-17 01:12:09

    위의 글만으로 HTML과 Script가 어떻게 관련 있는지 엮이는지 모르겠으나 (노트와 저 시간 관련 함수들이 글에서는 관련이 없으니까요) 추측하기를 클로저 때문인 것 같습니다. 아마도 함수 밖에 section element를 선언하고 함수가 global variable로 접근하시는 거라 생각합니다. 만약 님이 selection element를 지워버리면 DOM에서는 지워지지만 global variable은 여전히 selection element의 접근을 위한 reference를 가지고 있습니다. 함수는 closure를 통해 지워지기 전의 element의 reference를 접근하니 작동하지 않을 수 있습니다. 그렇다면 새롭게 생성한 section element는 다른 reference를 가지고 있으니 작동하지 않을 것입니다. 


    간단한 해결법은 closure를 이용하지 말고 element의 reference를 parameter로 넘기는 것입니다. 

  • 로그인을 하시면 답변을 등록할 수 있습니다.