WEB2 - JavaScript 28 (함수의 활용)

2021. 9. 24. 13:00·youtube.com|user|egoing2/WEB2 - JavaScript
728x90

함수의 활용
- 리팩토링
  • 3.html
    <input> 태그 안의 JS 코드를 <head> 태그 안으로 옮긴 후 nightDayHandler 함수를 만든다. 
    그리고 <body> 태그의 <input> 태그 안에는 nightDayHandler( ); 를 붙여 넣는다. 
<!DOCTYPE html>
<html>
  <head>
    <title>WEB1 - JavaScript</title>
    <meta charset="utf-8">
    <script>
    function nightDayHandler(){
      var target = document.querySelector('body');
      if(this.value === '开启'){
        target.style.backgroundColor='black';
        target.style.color='white';
        this.value = '关闭';

        var alist = document.querySelectorAll('a');
        var i = 0;
        while(i < alist.length){
          alist[i].style.color = 'mediumspringgreen';
          i = i + 1;
        }

      } else {
        target.style.backgroundColor='white';
        target.style.color='black';
        this.value = '开启';

        var alist = document.querySelectorAll('a');
        var i = 0;
        while(i < alist.length){
          alist[i].style.color = 'limegreen';
          i = i + 1;
        }
      }
    }
    </script>
  </head>
  <body>
    <h1><a href="index.html" title="到百科">WEB网络</a></h1>
    <input type="button" value="开启" onclick="
      nightDayHandler();
    ">
    <div id="grid">
      <ol>
        <h3>计算机语言-常见语言</h3>
        <li><a href="1.html" title="到HTML意义">HTML超文本标记语言</a></li>
        <li><a href="2.html" title="到CSS意义">CSS层叠样式表</a></li>
        <li><a href="3.html" title="到JavaScript意义">JavaScript</a></li>
      </ol>
      <div id="文章">
        <h3>-JavaScript</h3>
          <p style="margin-top:40px;">
              <strong><u>JavaScript</u></strong>即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。
          </p>
          <p>
            <a href="https://baike.baidu.com/item/JavaScript" target="_blank" title="到百科的JavaScript意义">更多>></a>
          </p>
          <img src="coding.jpg" width="50%">
        </div>
      </div>
      <input type="button" value="开启" onclick="
  </body>
</html>

그런데 开启 버튼을 클릭하면 야간모드와 주간 모드는 잘 작동하지만 关闭 버튼으로 변하지는 않는다.


  • onclick 이라는 이벤트 안에서 this 가 문제라는 것.
    이 this 는 event 가 소속되어 있는 <input> 태그를 가리키도록 약속되어 있는데 독립된 함수를 만들게 되면 this 는 더 이상 input 버튼이 아니고, 전역 객체를 가리키게 된다. (웹브라우저에서는 윈도우가 된다.) 
    (이 부분은 이해하지 못할거라고 하신다.)
    그래서 함수 안에 있는 if 문의 this 값을, <input> 을 가리키게 하기 위해서 nightDayHandler 가 실행될 때 여기에 this 값을 준다. 그리고 self 라는 매개변수를 주고 함수 안의 if 문에 있는 this 를 self 로 바꿔준다. 
<!DOCTYPE html>
<html>
  <head>
    <title>WEB1 - JavaScript</title>
    <meta charset="utf-8">
    <script>
    function nightDayHandler(self){
      var target = document.querySelector('body');
      if(self.value === '开启'){
        target.style.backgroundColor='black';
        target.style.color='white';
        self.value = '关闭';

        var alist = document.querySelectorAll('a');
        var i = 0;
        while(i < alist.length){
          alist[i].style.color = 'mediumspringgreen';
          i = i + 1;
        }

      } else {
        target.style.backgroundColor='white';
        target.style.color='black';
        self.value = '开启';

        var alist = document.querySelectorAll('a');
        var i = 0;
        while(i < alist.length){
          alist[i].style.color = 'limegreen';
          i = i + 1;
        }
      }
    }
    </script>
  </head>
  <body>
    <h1><a href="index.html" title="到百科">WEB网络</a></h1>
    <input type="button" value="开启" onclick="
      nightDayHandler(this);
    ">
    <div id="grid">
      <ol>
        <h3>计算机语言-常见语言</h3>
        <li><a href="1.html" title="到HTML意义">HTML超文本标记语言</a></li>
        <li><a href="2.html" title="到CSS意义">CSS层叠样式表</a></li>
        <li><a href="3.html" title="到JavaScript意义">JavaScript</a></li>
      </ol>
      <div id="文章">
        <h3>-JavaScript</h3>
          <p style="margin-top:40px;">
              <strong><u>JavaScript</u></strong>即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。
          </p>
          <p>
            <a href="https://baike.baidu.com/item/JavaScript" target="_blank" title="到百科的JavaScript意义">更多>></a>
          </p>
          <img src="coding.jpg" width="50%">
        </div>
      </div>
      <input type="button" value="开启" onclick="
  </body>
</html>

 

저작자표시 (새창열림)

'youtube.com|user|egoing2 > WEB2 - JavaScript' 카테고리의 다른 글

WEB2 - JavaScript 30 (객체, object)  (1) 2021.09.28
WEB2 - JavaScript 29 (객체 'object' 의 예고)  (0) 2021.09.27
WEB2 - JavaScript 24 to 27 (함수, function)  (4) 2021.09.23
WEB2 - JavaScript 23 (배열과 반복문의 활용)  (5) 2021.09.19
WEB2 - JavaScript 19 to 22 (반복문, 배열)  (8) 2021.09.17
'youtube.com|user|egoing2/WEB2 - JavaScript' 카테고리의 다른 글
  • WEB2 - JavaScript 30 (객체, object)
  • WEB2 - JavaScript 29 (객체 'object' 의 예고)
  • WEB2 - JavaScript 24 to 27 (함수, function)
  • WEB2 - JavaScript 23 (배열과 반복문의 활용)
ro117youshin
ro117youshin
코딩 / 외국어공부 (영어, 중국어) / 독서 등 자기계발을 기록합니다.
  • ro117youshin
    Taking an extra step
    ro117youshin
  • 전체
    오늘
    어제
    • 분류 전체보기 (153)
      • DDD (5)
      • JAVA (13)
      • Spring Boot (2)
      • Spring (4)
      • MySQL (1)
      • C (1)
      • Algorithm & Data Structure (34)
        • study (15)
        • programmers (0)
        • boj (18)
        • assignments (1)
      • CS: Computer Science (6)
        • CS50 2019 (4)
        • Network (2)
        • Database (0)
      • Git (3)
      • foreign language (16)
        • English (0)
        • Chinese (16)
      • BOOK (2)
      • ETC (2)
      • youtube.com|user|egoing2 (64)
        • WEB1 - HTML & Internet (5)
        • WEB2 - CSS (9)
        • WEB2 - JavaScript (18)
        • JavaScript Immutability (0)
        • DATABASE1 (4)
        • DATABASE2 MySQL (12)
        • JAVA1 (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ddd
    개발공부
    알고리즘문제
    baekjoon
    HSK6급
    HSK6급공부
    Java
    JAVA1
    생활코딩
    Java자료구조
    Domain Driven Design
    조건문
    도메인 주도 설계
    최범균
    HSK6급모의고사
    객체
    mysql
    HSK6급필수어휘
    백준
    코딩공부
    자바
    HTML
    variable
    css
    DATABASE2
    javascript
    중국어공부
    js
    나의 앱 만들기
    BOJ
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
ro117youshin
WEB2 - JavaScript 28 (함수의 활용)
상단으로

티스토리툴바