메뉴 건너뛰기

조회 수 326 댓글 2

<!DOCTYPE html>
<html>
<head>
  <title>Document</title>
</head>
<body>
  <h3>아이템을 클릭하면 1.3배 크기로</h3>
  <hr>
  <p>여름 방학 때 하고 싶은 것들</p>
  <ul>
    <li>자전거로 대한민국 일주</li>
    <li>책 100권 읽기</li>
    <li>철인 3종 경기 준비</li>
    <li>자바스크립트 정복</li>
  </ul>
  <script>
  var liArray = document.getElementsByTagName('li');
  for (i=0; i<liArray.length; i++){
    //liArray[i].addEventListener("click", size, false);
    liArray[i].addEventListener("click", size, false);
    }

  function size(){
    for(i=0; i<liArray.length;i++){
      liArray[i].style.fontSize="1em";
    }
    this.style.fontSize="1.5em";
  }
  </script>
</body>
</html>
 

 

우선 제가 푼 코드입니다.

책의 문제에는 head 위쪽의 스크립트에서 작성하라고 해서 한참을 헤매다가

결국 코드 제일 밑으로 옮기니 정상적으로 되더라구요.

onload를 사용하라는 의도였던건지는 모르겠네요ㅠ

그때문인지 head에서 스크립트 작성시 li 배열에 이벤트리스너를 넣어도 함수 작동이 잘되지 않더라구요.

 

구글검색해도 많이 나오지만 스크립트를 헤드위에 넣을때와 아닐때의 명확한 이유를 교수님이나 관리자님의 정의를 듣고싶습니다.

 

그리고 클릭 이벤트가 발동되기전 for문으로 모든 li태그의 폰트 사이즈를 다시 1em으로 주는 방법을 썻는데요,

추천해주시는 방법은 뭐가 있는지 궁금합니다.

제가 쓴 방법은 결과만 궁여지책으로 나왔을 뿐이지 자바스크립트가 추구하는 최적의 방법은 아닌것 같아서요.

 

진짜 답안지가 없어서 헤맬때마다 미치겠지만 이렇게 공부를 시켜주시는 의도시기에 묵묵히 할뿐입니다 감사합니다..ㅠㅠ

 

 

?
  • profile
    황기태 2018.10.24 09:20

    1. 책의 실습문제 구성은 홀수번을 풀면서 짝수번을 푸는 열쇠를 얻도록 하는 것입니다.
    7번 문제를 풀면서 span 태그에 이벤트가 발생하는데 span 객체에 이벤트 리스너를 달면 되지,
    왜 window 객체에 이벤트 리스너를 단 것일까? 라고 생각해보지 않았어요?
    8번 문제도 동일한 유형을 가지고 있습니다.
    head 부분에 자바스크립트 코드(이벤트 리스너)를 두기 위해서
    7번 처럼 window 객체에 onclick 이벤트 리스너를 달고 리스너 코드에서 li 태그를 구분해내는 것입니다.
    한 번 다시 작성해보세요.

    이렇게 하면 각 태그들에 발생하는 이벤트의 처리를 한 군데서 모두 작성할 수 있는 장점이 있습니다.

    자바스크립트 코드를 HTML 텍스트의 곳곳에 둘 수도 있지만, HTML 페이지가 복잡하고 길면 나중에 코드를 분석하는 것이 힘듭니다.

    그래서 한 곳에 모아 두는 것이 좋고 head 부분에 넣는 것이 좋지요.

    특별히 자바스크립트 코드를 .js 파일에 만들어 두고 head 태그에서 불러와서 사용하면,
    자바스크립크 코드와 HTML 텍스트가 섞여 작성되지 않기 때문에
    웹 페이지가 깔끔해지는 등 여러 장점이 있습니다.


    2. window.onclick = ... 을 사용하여 문제 7의 코드와 비슷하게 작성하면, 질문하신 분이 작성한 것보다 매우 깔끔하게 될 것입니다.
    대신, 이전에 클릭한 객체를 기억해두어야 합니다. 지난번 질문에서 last를 사용한 것을 기억하십시오.
    현재 클릭된 li 객체에 대해서는 다음과 같이 하고
    e.target.style.fontSize = "1.3em";

    이전에 클릭된 것을 체크하기 위해 다음과 같이 하면 됩니다.
    if(last != null) // 이전에 클릭된 것이 있다면
    last.style.fontSize = "1em";

    그리고 현재 객체가 이전 객체로 기억하기 위해 다음과 같이 합니다.
    last = e.target;

    힌트를 많이 드렸는데 해보세요.

    3. 열심히 하는 만큼 배웁니다. 정답을 하는 것보다 공부하는 과정을 통해 성장합니다.

  • ?
    muuum 2018.10.25 06:56

    긴 장문의 세세한 답변 감사드립니다! 이 책을 통해서 포기할 뻔 했던 프로그래밍 공부를

    다시 하게 되었습니다. 정말 너무 많은 것을 배우고 있습니다. 감사합니다!

    <script>
    var last;
    window.onclick = function(e) {

    if (last != null) // 이전에 클릭된 것이 있다면
    last.style.fontSize = "1em";

    if (e.target.tagName.toLowerCase() != "li") return;
    e.target.style.fontSize = "1.3em";
    last = e.target;

    }
    </script>


QnA

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

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18241
363 이미지파일 6 스물다섯 2022.04.08 110
362 4장 171쪽 2 chu 2022.04.04 56
361 html5 태그 검사 2 열공이 2022.03.10 94
360 2장 실습문제 1번 질문드립니다! 1 망나뇽 2022.03.06 168
359 안녕하세요 관리자님 실습 문제 짝수본 zip 파일은 제공 되지 않는 건가요? 1 문의 2022.02.25 210
358 r/w는 무슨 뜻인가요? 1 ㅇㅁㅇㅈ 2021.12.22 390
357 웹 워커 13-7 결과 55가 출력되지 않습니다. 1 chg115 2021.12.03 101
356 연습문제의 미디어 파일 1 부산 2021.11.25 132
355 document.getElementBy~ 2 tc0712 2021.11.22 108
354 윈도우 브라우저와 윈도우 탭 2 tc0712 2021.11.22 57
353 5장 내용 중 궁금한 점 있습니다! 1 file 2021.10.15 215
352 5장 5-(2) 질문 있습니다! 1 2021.10.14 117
351 form 태그와 웹서버 1 tc0712 2021.09.29 103
350 HTML5+CSS3+Javascript 웹 프로그래밍[수정판] 4 file Jenny 2021.09.25 516
349 웹서버와 클라이언트 2 tc0712 2021.09.14 95
348 URL 과 IP 주소 2 tc0712 2021.09.14 120
347 태그와 속성 2 tc0712 2021.09.08 72
346 캔버스 관련 질문 1 원그리기 2021.08.22 101
345 웹 사이트 접속 질문 있습니다. 1 초심자 2021.08.21 131
344 질문 있습니다. 2 2021.08.19 134
목록
Board Pagination Prev 1 ... 2 3 4 5 6 7 8 9 10 ... 21 Next
/ 21
위로