html+JS 버튼을 이용하여 삼행시 한 줄씩 출력하는 프로그램

2021. 12. 22. 22:52Web

저는 잔나비를 삼행시로 한번 지어봤습니다.

밑의 잔 / 나 / 비 버튼을 하나씩 클릭하면 잔 = ~ / 나 = ~ / 비 = ~ 에 대한 삼행시 문구가 한 줄씩 출력되는 프로그램입니다. html과 Javascript를 이용하였습니다. 

 

'잔' 버튼을 클릭하였을 때 HTML 페이지 출력결과입니다. 

'나' 버튼을 클릭하였을 때 HTML 페이지 출력결과입니다.

 

'비' 버튼을 클릭하였을 때 HTML 페이지 출력결과입니다.

 

 

 

꼭 잔>나>비 순서대로 누르지 않아도 '나' 버튼만 클릭하였을 때 '나를 설레게 만든다' 문구가 먼저 출력될 수 있습니다. 다른 버튼도 마찬가지입니다. 

 

 

 

사용환경은 VSCode입니다. 

 

html 코드 

사진 클릭하면 더 잘 보입니다. 

 

<body> 태그 안에서 index.js 파일을 가져오기 위하여 <script src="./index.js"></script> 코드를 사용하였습니다. 

삼행시 문구가 출력되기 위해 잔,나,비 글자를 h1 크기로 설정하였으며

 

잔,나,비 버튼을 클릭하였을 때 index.js 내의 함수들을 호출하여 Text가 바뀔 수 있도록 onclick 메소드를 이용하였습니다. 

 

 

 

index.js 

 

사진 클릭하면 더 잘 보입니다.

index.js 파일 내에서는 잔,나,비 각각의 버튼을 클릭하였을 때 HTML내에서 h1 크기로 지정한 Text들이 바뀔 수 있도록 함수를 구현하였습니다. 

 

잔,나,비 글자 3개가 각각 바뀔 수 있도록 함수는 3개로 구현하였으며 DOM객체에 접근하기 위해 

document.getElementsByTagName('h1')을 사용하여 h1 태그값을 이용하였습니다. 

 

 

 

 

 

 

그런데, 왜 변수명이 전부 var h1일까요? 만약 changeText2()의 변수명을 var h2로 선언해본다면 어떤 문제가 발생할까요? 

- '잔' 버튼을 클릭했을 때는 잔나비 노래는 이라는 문구가 정상적으로 출력되었지만,

'나' 버튼을 클릭했을 때는 '잔'부분이 나를 설레게 만든다 문구로 바뀌었습니다.

 

바꾼 코드

function changeText2() {
    var h2 = document.getElementsByTagName('h1')
    h2[0].innerHTML="나를 설레게 만든다"
}

 

 

 

 

아마도 var h1의 태그값들이 모두 h1으로 동일한데, 앞선 html 페이지에서 잔,나,비를 모두 h1 태그로 설정했기 때문에 h1에 걸리는 변수들을 모두 변수명 h1으로 설정하고 거기서 배열이 정해진것이어서(getElementsByTagName은 배열을 return하므로)

잔=0 나=1 비=2 순서대로 배열 인덱스 번호가 정해지지 않았을까 싶습니다. 

 

일단 제가 코딩을 해보고 느낀 점은 이러합니다.

잘못된 부분이 있다면 지적 환영합니다!!!

 

읽어주셔서 감사합니다 : )