메뉴 건너뛰기

2022.05.17 14:57

9장 실습문제3번

조회 수 194 댓글 2

개정판 410page 9-9에서는 매개변수를 사용하지 않았는데

실습문제 3번같은 경우는 calculate(event)를 사용해야 하는 이유가 있을까요?

그리고 event는 다른걸로 대체가 안되나요?

 

function calculate(e){
    if(e.key == "Enter") {
        let exp = document.getElementById("exp");
        let result = document.getElementById("result");
        result.value = eval(exp.value);
    }

<form>
식 <input type="text" id="exp" value="" onkeydown="calculate(event)"><br>
값 <input type="text" id ="result"> 
</form>

?
  • ?
    관리자 2022.05.18 12:38

    1) W3C 표준에서 이벤트가 발생하면, 발생한 이벤트의 타입 등의 정보를 가진 이벤트 객체가 생성되며 이 객체가 이벤트 리스너의 첫번째 매개변수로 전달됩니다. 그러므로 다른 함수에 이벤트 객체를 전달하려면 첫번째 매개 변수를 전달해야 합니다. 실습문제 3에서는 onclick = calculate(event) 라는 코드를 통해 브라우저로부터 event 라는 이름의 변수로 이벤트 객체를 전달받았습니다.

    2) 그런데 예제 9-9의 경우
    역시 버튼이 클릭되면 이벤트가 발생하고 이벤트 객체가 생성됩니다. 그런데 이 사례에서는 굳이 이벤트를 사용하지 않고 calculate()를 호출하는 것으로 처리하였습니다.
    왜냐하면 발생한 이벤트의 타입이나 눌러진 키 값 들의 정보가 필요없기 때문입니다.

    3) 하지만, 실습문제 3의 경우, 임의의 키를 누르면 이벤트가 발생하지만,
    엔터기를 누른 경우에만 처리해야하기 때문에 발생한 이벤트에 관한 정보를 가진 이벤트 객체가 필요합니다.
    그래서 calculate(event)를 통해 현재 발생한 이벤트 객체를 가리키는 event 변수를 calculate(e) 함수에 전달하고 함수에서는 e를 이용하여 어떤 키가눌러졌는지 알게 되는 겁니다.

    4) 역사적인 이유때문에, 마이크로소프트 사는 W3C의 웹 국제 표준과 달리 처리하는 방법이 있었기 때문에 W3C 방법외에 이벤트 객체를 다루는 다른 방법을 제공합니다.
    마이크로소프트에 개발 배포하는 브라우저 들은 이벤트가 발생하는 경우, window.event라는 전역변수가 이벤트 객체를 가리키도록 합니다.
    그래서 이들 브라우저에서는(혹은 마이크로소프트사의 브라우저와 호환성을 가지도록 작성한 다른브라우저에서도, 하지만 장담할 수 없습) 다음과 같이 작성해도 됩니다.
    function calculate(){
    if(window.event.key == "Enter") {
        let exp = document.getElementById("exp");
        let result = document.getElementById("result");
        result.value = eval(exp.value);
    }

    <form>
    식 <input type="text" id="exp" value="" onkeydown="calculate()"><br>
    값 <input type="text" id ="result">
    </form>

    하지만, 우리는 w3C의 국제 표준에 맞추어 코딩해야 세상의 모든 브라우저에서 실행될 것입니다.

  • ?
    열공이 2022.05.21 15:55
    교수님~상세한 설명 감사합니다. 짱~!

QnA

공부하면서 궁금했던 것을 질문해보세요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18233
402 혹시 예전 서적인 "DHTML + 자바스크립트 프로그래밍"의 예제를 받을 수 있는 방법은 없는지요? 2 비만타쿠미 2018.09.26 116
401 한글html 1 키보드 향기 2020.03.29 919
400 한글 타이틀이 깨져 보입니다. 1 안스가리오 2020.01.06 116
399 표와 div span 4 키보드 향기 2020.04.05 108
398 페이지에 첨부하고 싶은 이미지의 위치에대해 궁금합니다 1 정택희 2017.02.13 277
397 페이지 247 에 있는 Open Challenge 05 의 CSS3로 태그 배치하기를 공부하고 있는데 질문드립니다. 1 file 워니고 2018.03.28 3870
396 테스트 관리자 2019.08.30 171
395 태그와 속성 2 tc0712 2021.09.08 72
394 크롬 오디오 자동재생 관련 질문입니다! 1 ^_^ 2018.09.30 448
393 코드 잘못된 부분을 봐주시면 정말 감사하겠습니다 1 file 입문한 사람 2020.04.01 607
392 캔버스 관련 질문 1 원그리기 2021.08.22 101
391 챕터2 연습문제 8번 김석현 2018.04.22 156
390 챕터 3의 10번 문제 1 컴공과 입문 2018.03.20 125
389 책을 종이책으로 구매했는데 1 ddd 2024.03.21 73
388 책을 마치며 7 은성 2017.04.13 492
387 책 151p 3장 오픈챌린지 문제질문입니다. 3 이상민 2019.07.19 238
386 짝수번 정답 3 idididid 2017.12.24 3114
385 질문입니다 1 1213 2018.03.06 420
384 질문드립니다. 1 ㅇㅇ 2020.06.03 306
383 질문 있습니다. 2 2021.08.19 134
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 21 Next
/ 21
위로