본문 바로가기
front-end/javascript

[JAVASCRIPT] 자바스크립트 과제 - 계산기만들기, 체크박스, 주사위랜덤게임

by CodeMango 2023. 1. 31.

 1. 과제 해설 work 0 ~ 3  

work - 간단 계산기 만들기

i과제에서 button 쓸 때 두가지 방법 있음

1. 함수를 5개로 각각

2. 함수를 하나로

answer

<!DOCTYPE html>
<html><head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>


<h3>변수의 연산</h3>

a, b에 대해서 변수 a와 b의 계산 결과를 표시합니다.

<br><br>

<button type="button" onclick="proc(1)">덧셈</button>
<button type="button" onclick="proc(2)">뺄셈</button>
<button type="button" onclick="proc(3)">곱셈</button>
<button type="button" onclick="proc(4)">나눗셈</button>
<button type="button" onclick="proc(5)">나머지</button>
<br><br>

<!--  주의 : input 안에 value를 굳이 적지 않아도 기본적으로 value값이 있다. -->
<!--  readonly : 유저가 건들 수 없게 한다. / size :  박스의 길이 -->

<input type="text" id="a" size="10">
<input type="text" id="oper" size="5" readonly="readonly">
<input type="text" id="b" size="10">
=
<input type="text" id="result" size="20" readonly="readonly">




<script type="text/javascript">

function proc( oper ) {	
	
//1. 입력받은 값을 대입할 변수를 만든다.

	let a_val = document.getElementById('a').value; //input으로 입력받은 숫자를 a_Val에 대입
	let b_val = document.getElementById('b').value; //input으로 입력받은 숫자를 b_Val에 대입
	
//2. 빈칸 조사 - 빈칸인 채로 버튼 누르면 경고가 뜨게 만들기 (앞으로 항상 생각해야하는 부분)
//공백(스페이스) 누를 때도 인식 안되게 trim 함수 추가 = 빈칸 제거하기	

	if(a_val.trim() == "" || b_val == ""){		//trim함수 : 빈칸 제거
		alert('숫자를 입력해 주십시오');
		return;
	}
// return : if문을 충족하면 reture문 아래의 로직은 작동하지 않고(중단) 함수 자체에서 빠져나간다.
// return문 개념 : https://kyounghwan01.github.io/blog/JS/JSbasic/returnRoleFunction/
	
	
// 3. 숫자 넘겨받기	 + 숫자형변환
/* 	let a = parseInt(document.getElementByid('a').value); 
	let b = parseInt(document.getElementByid('b').value); */
//위의 문장을 써도 되지만, 위에서 이미 a_val로 넘겨받았으므로 아래 문장으로 간결하게 쓴다.

	let a = parseInt(a_val);
	let b = parseInt(document.getElementById('b').value);
	
// 4. result를 결과값으로 하기 위해,op를 기호값으로 하기 위해 선언과 초기화
	let result = 0;
	let op = "+";
	
// 5. 조건문
	if(oper == 1){
		result = a + b;
		op = "+";
	}else if(oper == 2){
		result = a - b;
		op = "-";
	}else if(oper == 3){
		result = a * b;
		op = "*";
	}else if(oper == 4){
// 주의 ! 나눌때는: 0으로 나눌 수 없으므로 조건 설정해놓기 (나누기, 나머지 둘다 적용)
		if(b == 0){
			alert("계산할 수 없습니다. 다시 입력해 주세요");     // 0을 입력한다면 경고 띄우고나서
			document.getElementById('b').value = "";   // b를 빈칸으로 만들어줌
			return;
		}
		result = a / b;
		op = "/";
	}else{
		result = a % b;
		op = "%";
	}
	document.getElementById("oper").value = op;  // oper가 input에 들어있으니까 innerHTML이 아니라 value
	document.getElementById("result").value = result;	
}


</script>

</body></html>

 


work1 - 체크박스 사용하기

answer 01

방법1. 기본 풀이 방법

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--  방법1. 기본 풀이 방법  -->

<h3> 체육관 이용 요금1</h3>
<br>
기본 사용료(4시간)40,800원
<br><br>
<input type="checkbox" id="chk1" value="20000" onclick='sum(0)' >야간조명(20,000원)<br>
<input type="checkbox" id="chk2" value="4000" onclick='sum(1)'>배구 네트 x 2장(4,000원) <br>
<input type="checkbox" id="chk3" value="20000" onclick='sum(2)'>배구공 x10(20,000원) 

<br><br>

합계금액 : <input type="text" id = "total" value = "40800" >원정

<script type="text/javascript">

// 1. total에 있는 비용을 가져와야함 (함수 외부에서도 상관 없음)
let total = parseInt(document.getElementById("total").value);


function sum(num)  {
	
// 체크박스에서 checked 상태면 true 아니면 false를 반환한다.

// 2. 체크된지 안된지 검사하기 
// sum이 0일 때 id가 chk1인 값이 선택됐다면 true반환, 아니라면 false 반환
	if(num == 0){  // onclick='sum(0)' 이라면
		let chk1 = document.getElementById("chk1").checked; //checked :체크됐다
//		alert(chk1);  
	
// 3. 체크박스에 들어가있는 value값 가져오기 (20000)
	let value = parseInt(document.getElementById("chk1").value);
//	alert(value);  // 20000 반환

// onclick 함수니까 선택을 해줘야 작동함. 1) 선택을 해서 선택을 하느냐 2) 선택을 해서 선택 해제하느냐
// 4. 조건문 -계산식 작성
	if(chk1 == true){		    //true : 1) 선택을 해서 선택을 했다면
		total = total + value;  //total(40800) + value(20000)
	}else{						//false : 2) 선택을 해서 선택 해제했다면(이미 선택됐던 상태)
		total = total - value;  //total(60800) - value(20000)
	}
// 5. 최종 : "total" 에 total값 집어넣기
	document.getElementById("total").value = total;
	}
	
//6. num 1, 2 계속 같은 방식으로 반복해주기

	else if (num==1){
		let chk2 = document.getElementById("chk2").checked; //checked :체크됐다

//체크박스에 들어가있는 value값 가져오기 (4000)
	let value = parseInt(document.getElementById("chk2").value);
		if(chk2 == true){
			total = total + value;
		}else{
			total = total - value;
		}
		document.getElementById("total").value = total;
		}
			
			
	else if (num ==2){
		let chk3 = document.getElementById("chk3").checked; //checked :체크됐다

		//체크박스에 들어가있는 value값 가져오기 (20000)
			let value = parseInt(document.getElementById("chk3").value);
			if(chk3 == true){
				total = total + value;
			}else{
				total = total - value;
			}
			document.getElementById("total").value = total;
			}
}

</script>

</body>
</html>

answer 02

방법2. form과 배열을 이용해 푸는 방법

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--  02. form과 배열을 이용해 푸는 방법 -->

<h3> 체육관 이용 요금1</h3>
<br>
기본 사용료(4시간)40,800원
<br><br>

<!--  4. form으로 접근한다. -->

<form name = "frm" > 
			<!--  form 안에 4가지 elements가 있고 0번지부터 3번지까지 있음. -->
<!-- 0번지 --> <input type="checkbox" id="chk1" value="20000" onclick='sum(0)' checked="checked" > 야간조명(20,000원) <br>
<!-- 1번지 --> <input type="checkbox" id="chk2" value="4000" 	 onclick='sum(1)'> 배구 네트 x 2장(4,000원)              <br>
<!-- 2번지 --> <input type="checkbox" id="chk3" value="20000" onclick='sum(2)'> 배구공 x10(20,000원)                 <br><br>
<!-- 3번지 --> 합계금액 : <input type="text" id = "total" value = "40800" >원정  	<!--  3번지 -->

</form>


<script type="text/javascript">

//1. 배열 생성
let array = new Array(3);
//2. 값을 배열에 다 넣어놓기
array[0] = parseInt(document.getElementById("chk1").value);	//20000
array[1] = parseInt(document.getElementById("chk2").value); //4000
array[2] = parseInt(document.getElementById("chk3").value); //20000

//3. 합계금액의 id=total을 이용해서 합계금액의 value값을 total에 집어넣기
let total = parseInt(document.getElementById("total").value); 

//5. 문서 안의 form에 접근하기 - form 안의 elements에 배열로 접근하기
function sum( num ) {
	
// (연습)체크된지 안된지 검사하기 -> 체크됐으면 true/ 체크 안됐으면 false 반환
//alert(document.frm.elements[0].checked );   //0번지 checked를 alert로 찍어보면 true/false로 나옴
//alert(document.frm.elements[1].checked ); */
	
//6. 체크된지 안된지 검사하기 num = 0 or 1 or 2
// array[0] =20000,array[1]=4000,array[2]=20000
// onclick 함수니까 선택을 해줘야 작동함. 1) 선택을 해서 선택을 하느냐 2) 선택을 해서 선택 해제하느냐

	if(document.frm.elements[num].checked == true){ //  1) 선택을 해서 선택했다면
		total = total + array[num];				// total(40800)  + 체크된 array넘버값
	}else{										//   2) 선택해서 선택 해제했다면
		total = total - array[num];				// total(40800)  - 체크된 array넘버값	       
	}
//최종적으로 total에 넣어주기
	document.frm.elements[3].value = total; 
	
}

</script>

</body>
</html>

work2 - 주사위 랜덤 게임 만들기


더보기

< random 함수 파헤치기>

(참조 :https://velog.io/@hope9405/%EC%99%9C-%EB%9E%9C%EB%8D%A4-%EC%A0%95%EC%88%98%EB%A5%BC-%EB%A7%8C%EB%93%A4%EB%95%8C-Math.floor%EB%A5%BC-%EC%93%B8%EA%B9%8C)

 

random()함수를 자바스크립트에서 사용할 때 주의점은 Math.floor, ceil, round 와 같이 쓸 수 있다는 것이다. 

기존 문법

Math.ceil : 소수값이 존재할 때 값을 올림
Math.floor : 소수값이 존재할 때 소수값을 버림
Math.round : 소수값에 따라 올리거나 버리는 반올림 함수
이지만


Math.random과 같이 쓸 때는
Math.floor    :  0 ~ N-1 의 랜덤한 정수 반환
Math.ceil     :  1 ~ N 의 랜덤한 정수 반환
Math.round : 사용할 경우 처음과 마지막 수가 나올 확률이 적어짐

이런 기능으로 바뀐다.


Math.ceil의 사용방법은  ->   Math.ceil([숫자]);  

따라서   Math.ceil(Math.random() * 6)   ==  1~6 까지의 랜덤값

answer

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>2개의 주사위</h1>
<br>
버튼을 클릭하면 2개의 주사위가 랜덤됩니다.
<br><br>
<!--  1. 주사위 2개의 이미지 삽입하기 -->
<img alt="" src="./images/sai_1.gif" id = "d1">
<img alt="" src="./images/sai_6.gif" id = "d2">

<!--  2. 합계가 몇이 나왔는지도 따로 표시하기 위해 dic1를 둔다.-->
<p id="dic1"></p>
<br>
<button type = "button" onclick = "dice()"> 주사위를 굴린다 </button>


<script type = "text/javascript">

// 3. 주사위 굴리는 버튼을 눌렀을 때 랜덤값(난수) 나오는 dice 함수 생성  
// 		난수 생성 함수 : Math.random()
// 		Math.ceil  :  1 ~ N 의 랜덤한 정수가 나온다.
// 		따라서 Math.ceil(Math.random() * 6) : 1~6 까지의 랜덤값

function dice(){   
	let r1 = Math.ceil(Math.random() * 6);  
	let r2 = Math.ceil(Math.random() * 6);
	
	console.log( r1 + " " + r2);
	
// 4. 이미지 변경하기 : 이미지 제목이 sai_1~6인 것을 이용하기
// 		id가 d1인 이미지의 소스(지정경로)를 바꿔서 이미지를 변경한다.
	document.getElementById("d1").src = "./images/sai_" + r1 + ".gif"; //sai_첫번째랜덤값 (1~6)
//		id가 d2인 이미지의 소스(지정경로)를 바꿔서 이미지를 변경한다.
	document.getElementById("d2").src = "./images/sai_" + r2 + ".gif"; //sai_두번째랜덤값 (1~6)
	
// 5. dic1에 값 올려주기
//		<p id="dic1"></p> 의 사이에 값이 삽입되므로 <p id="dic1"> r1+ r2 </p> 값이 출력된다.
	document.getElementById("dic1").innerHTML = r1 + r2;  // 
}

</script>
</body>
</html>

결과 서버


work3 - 선택시 이미지 출력하기 (select)

answer

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!--  internal 방식 : css 선언 후 body{}를 열어주는방법
<style type ="text/css">
body{
	background-color : #000;
	color : white; 
-->

</style>
</head>

<!--  inline방식 (선호도 낮음, 급할때  쓴다.)
		1) body 태그에 직접 쓰기 
		2) style 안에 쓰기       	-->

<body bgcolor = "#000" text = "#fff" >
<body>
<h1> 사진들</h1>

<!--  🎃이 문제의 주의사항🎃 
선택박스(select)의 위치 배치 이쁘게(위아래로) 하기 위해서 테이블을 사용한다. -->

<!--  1. 테이블 설정 -->
<table> 
<tr>
	<td>
		<img alt = "" id = "photo" width = "320" height = "480" src="./images/image01.jpg">
	</td>
	<td valign = "top">  <!-- valign :위아래 맞추기(top, bottom) // align : 옆으로 맞추기 -->
	
	사진의 선택<br>
		
<!-- 2. select함수로 선택박스 만들기 
		선택이 바뀔 때마다 동작 실행하는 onchange 함수 사용 -->
		
	<select id = "picture" onchange = "photoChange()"> 
			<option>사진의 선택</option>					<!--  index: 0 -->
			<option value="image01.jpg">사진1</option>	<!--  index: 1 -->
			<option value="image02.jpg">사진2</option>	<!--  index: 2 -->
			<option value="image03.jpg">사진3</option>	<!--  index: 3 -->
			<option value="image04.jpg">사진4</option>	<!--  index: 4 -->
		</select>
	</td>
</tr>
</table>

<script type="text/javascript">
function photoChange(){
//	alert('변경!');  //변경됐는지 확인하기 위한 알람

// 3. value값 가져와서 img에 넣어주기 시작
// 1) 선택한 사진의 value값 가져오기 (image01, image02, image03, image04 중에 하나)
	let picture = document.getElementById("picture").value;
//	alert(picture);  : 사진2 선택시 image02반환 ...
	
	
// 2) select의 인덱스 번호 가져오기 -> 0,1,2,3,4 중에 하나
// 		이때 중요한건 쓸데없는 숫자를 분별하는것 -> 0은 쓸데없는 숫자이다.
	let selectIndex = document.getElementById("picture").selectedIndex;
//	alert(selectIndex); : 사진2 선택시 2 반환


// 3) 인덱스 번호가 0이 아닐때 선택한 사진의 이미지 반환하기
//		0은 "사진의 선택"이므로 해당 안됨 
	if( selectIndex !=0){	
	document.getElementById("photo").src = "./images/" + picture; //선택한 사진의 value값
	}		
}

</script>

</body>
</html>

 2. Link 태그 비교 

 

Link 태그
html에서 Link 태그는 a href 태그와 form action 태그가 있다. 
Java Script에서 Link 태그는 location.href 태그가 있다.

Html

🎈  a href            : <a href = "http://www.naver.com">

🎄 form action   : <form action ="http://www.naver.com">

 

Java Scrip
🎀 location.href  : locaiont.href = "http://www.naver.com"

 

 

🎈 a href

	<a href = "NewFile.jsp?name=성춘향&age=16"> NewFile로 이동 </a>

🎄 form action 

NewFile.jsp로 넘기기

	<form action = "NewFile.jsp">
	이름 : <input type = "text" name = "name"> <br>
	나이 : <input type = "text" name = "age"> <br>
	<input type="submit" value = "이동">
	
	</form>

NewFile.jsp

NewFile.jsp

🎀 Java Script 의 location.href

NewFile.jsp로 넘기기

	이름:<input type ="text" id = "name"><br>
	나이:<input type ="text" id = "age"><br>
	<button type = "button" onclick = "move()">이동</button>
	
<script type="text/javascript">

function move(){
	let name = document.getElementById("name").value;
	let age = document.getElementById("age").value;
	
	// 보내기 전 검사 빈문자열 검사
	if(name.trim() == "" ){
		alert("이름을 입력해 주십시오");
		return;
	}
	// 이름이 한글자인 경우도 검사
	if(name.trim().length<2){
		alert("이름을 정상적으로 입력해 주십시오");
		return;
	}
	location.href = "NewFile.jsp?name=" + name + "&age = " + age;
	// 권하나, 29 입력시에는 "NewFile.jsp?name=권하나&age=29" 라는 값으로 넘겨짐
	
}

 

 


 3. url 제어문 정리 

사용방법

<input type = "button" value = "이전" onclick ="back()">



<script type="text/javascript" >
function back(){
	history.back();
history.back() 이전으로 돌아가기
location.reload() 새로고침
history.forward() 앞으로 가기
location.href = "" "" 으로 이동하기

실제 사용 예시

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor = "green">


<h1> view two</h1>

<!-- 
간단한 코드는 onclick 에 직접 적어도 상관 없다 (함수로 안 빼고) but 추천하지 않는다.
 ex : <input type = "button" value = "이전" onclick =history.back();>
-->

<input type = "button" value = "이전" onclick ="back()">

<input type="button" value = "현재 페이지갱신" onclick = "reload()">
 
<input type = "button" value = "진행" onclick = "forward()">"

<input type = "button" value = "view three 로 이동" onclick = "gopage()">

<script type="text/javascript" >
function back(){
	history.back();			//history.back 자체가 '이전으로 돌아가기' 코드
}
function reload(){
	location.reload();		// location.reload 자체가 '새로고침(f5)' 코드
}
function forward(){
	history.forward();		// history.forward 자체가 '앞으로 가기' 코드
}
function gopage(){
	location.href = "viewThree.html"  	// location.href 자체가 '이동' 코드
}

</script>

</body>
</html>

  4. on 이벤트 핸들러  

핸들러 : on이 달려있는것들 ! ( 자주씀) 

 

1. onload :  웹페이지가 읽혀질 때 이벤트를 줄수 있음

- 현 html이 실행시에 한번만 실행된다.

- <body> <frame> <frameset> <iframe> <img> <input type="image"> <link> <script> <style> 태그 안에서 사용
- 한 페이지 안에 여러개의 onload 태그가 있을 때는 브라우저마다 실행되는 순서가 있음

 

onload로 실행할 수 있는 대표적 함수 

- viewScroll() : 스크롤 내리기 - 긴 문자열이 있을 때 사용한다.

 

2. onblur : 포커스가 해당 태그를 벗어났을 때 사용

- 포커스가 다른 곳으로 맞춰지면(다른곳 클릭하면) 함수가 실행됨
- 반드시 입력해야하는 곳에서 실행 (회원가입시 이름, 아이디, 패스워드 등을 빈칸으로 하지 못하도록)

 

3. onchange  : 입력값이 바뀌고 포커스가 다른곳으로 이동했을 때 바로 실행 

- 정규식 표현 등에 사용됨

 

4. onkeydown / onkeypress  : 키보드 눌렀을 때 이벤트 발생시킴

-문법이 다른 함수와 다름  -->  function을 바로 옆에 쓴다.


onkeydown : (대소문자 구분 x) 어떤 키가 눌렸는지 아스키코드값을 반환해준다. 

                      a라고 적으면 65가 반환됨

onkeypress : (대소문자 구분 O) 어떤 키가 눌렸는지 아스키코드값을 반환해준다.

                      a =97, A=65 반환됨

 

 

< onkeydown 예제 >

document.getElementsByName("title")[0].onkeydown --->아이디가 title인 태그에 출력

= function (event) { ---> 이벤트(키를 눌렀을때) 발생 시
     console.log("keydown = keycode: " + event.keyCode ); --> 콘솔에 event.keyCode 출력
}

 

< onkeypress예제 >

document.getElementsByName("title")[0].onkeypress = function (event) {
     console.log("keypress = keycode: " + event.keyCode);
}

 

 

5. 마우스이벤트 : onMouseDownonMouseUponMouseOveronMouseOut

 

onmousedown  : 마우스 클릭했을 때 실행
onmouseup       : 마우스 클릭을 놓았을 때 실행
onmouseover    : 마우스를 오브젝트 위에 올려두었을 때 실행
onmouseout      : 마우스가 오브젝트 위에서 벗어났을 때 실행

 

 

 

onload의 viewScroll 예제

<!--  6. onload에 viewScroll()함수를 호출 -->
<body onload = "viewScroll()">

<pre>
엄청나게 긴 문자들~~
</pre>


<script type="text/javascript">
// 1. 변수 생성 + 0으로 초기화
let posY = 0;	

function viewScroll() {
// 2. 매개변수 두개 중 하나는 0, 하나는 변수 대입
	window.scroll(0, posY);
	
// 3. posY를 증가시킨다.
	posY = posY + 2;
// 4. 스크롤 반복되도록 설정 
//	posY가 엄청 큰 값이면 다시 초기화
	if(posY == 300) posY = 0;

// 5. 반복되는 시간 설정 : 0.1초마다 반복실행 (100: 0.1초 1000 : 1초) 
	setTimeout("viewScroll()", 100);
}
</script>

onblur 예제

여기서 maxlength 는 최대 입력 글자수 설정 함수

maxlength = "2" -    > 2글자까지만 입력 가능

onblur : focus가 이동시 실행 
나이 : <input type = "text" onblur="onBlurFunc()" maxlength = "2">세
<br><br>


<script type="text/javascript">
function onBlurFunc(){
	alert('onblur 실행');
}
</script>

onchange 예제 1

숫자인지 체크하는 스킬 필요 (https://jsikim1.tistory.com/38 참조)

onchange : 입력값이 변경되고 포커스가 이동했을 시
<br>우편번호:
<input type="text" maxlength="3" size="5" onchange="isPostNum(this)">
-
<input type="text" maxlength="3" size="5" onchange="isPostNum(this)">
<br><br>

<script type="text/javascript">
// this를 써서 넘겨주기
function isPostNum( obj ) {  //obj - 오브젝트가 넘어온다.
	
//document.getElementById로 접근해도 되는데, 
// 만약 객체를 바로 넘겨주고 싶으면 this를 써서 넘겨주는 것도 가능하다.

	let str = obj.value;  //input에 입력된 값이 여기에 나온다.
//결국 입력값이 변경되고 포커스가 이동됐을 시에는 입력값이 str에 저장된다.
	
//숫자가 아닌 문자가 포함되었을 경우 조사하기   https://jsikim1.tistory.com/38
	//자바- 아스키코드값을 이용 / 자바크스립트에서는 /[^0-9]/g  
	if(str.match(/[^0-9]/g)){
		alert("문자가 포함되어 있습니다");
	}
}
</script>

onchange  예제 2  (select 선택박스 사용)

<select id = "sel" onchange="changeVal()">
	<option value = "apple" > 사과</option>
	<option value = "peer"  > 배</option>
	<option value = "banana" selected> 바나나 </option>
</select>


<script type="text/javascript">
// select의 값이 바꼈을 때 실행됨 
function changeVal(){
	
// 값이 바꼈을 때 값을 가져와서 알람 뜨게 하기
	let value = document.getElementById("sel").value;
	alert(value);
}
</script>

onkeydown 예제

onkeydown, onkeypress<br>

<input type="text"  name = "title">

<script type="text/javascript">

//name은 여러개 쓸 수 있어서 Elements
document.getElementsByName("title")[0].onkeydown = function (event) {
	console.log("keycode:" + event.keyCode);

onkeypress 예제

onkeydown, onkeypress<br>

<input type="text"  name = "title">

<script type="text/javascript">

//name은 여러개 쓸 수 있어서 Elements
document.getElementsByName("title")[0].onkeypress = function (event) {
		console.log("keycode:" + event.keyCode);

onMouseDownonMouseUponMouseOveronMouseOut 예제

 onMouseDown, onMouseUp, onMouseOver, onMouseOut <br>
 함수마다 각기 다른 그림으로 바꿔보자
 
 <input type = "image" src="./images/san0.gif"  id="textImg"
 					onMouseDown = "mousedown()"
 					onMouseUp	= "mouseup()"
 					onMouseOver	= "mouseover()"
 					onMouseOut	= "mouseout()"
 					>

<script type="text/javascript">
function mousedown(){
	document.getElementById("textImg").src = "./images/san1.gif"
}

function mouseup(){
	document.getElementById("textImg").src = "./images/san0.gif"
}
//마우스 올렸을 때
function mouseover(){
	document.getElementById("textImg").src = "./images/san2.gif"
}
//마우스가 벗어났을 때
function mouseout(){ 
	document.getElementById("textImg").src = "./images/san0.gif"
}

</script>

  5. 테이블 추가하기  

appenchild : appendChild는 오로지 node객체만 자식 요소로 추가할 수 있다

Q. 한줄은 html로 한줄은 자바스크립트로 테이블 데이터 추가해보기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<!--html 테이블에 이어서 데이터 추가할 때 자바스크립트로 하는 방법 -->
<!--  1. id 만들어놓기 -->
<table border = "1" id = "mytable">
<col width = "50"> <col width="100"> <col width="80">
<tr>
	<th>번호</th> <th>이름</th> <th>나이</th>	
</tr>

<tr>
	<td>1</td> <td>홍길동</td> <td>24</td>
</tr>


<script type="text/javascript">

//2. id를 통해서 테이블 가져오기
let table = document.getElementById("mytable");

//3. tr 만들기 (createElement를 통해)
let tr = document.createElement("tr");				// <tr></tr>

//4. td만들기 (appendChild : 사이에 넣어주기 활용)
let td1 = document.createElement("td");				// <td></td>
td1.appendChild(document.createTextNode("2"));		// <td>2</td>

let td2 = document.createElement("td");
td2.appendChild(document.createTextNode("성춘향"));	// <td>성춘향</td>

let td3 = document.createElement("td");
td3.appendChild(document.createTextNode("16"));		// <td>16</td>

//5. 이 세개의 td를 tr에 추가하기
tr.appendChild(td1);
tr.appendChild(td2);
tr.appendChild(td3);	

//6. 테이블에 tr 추가하기  ... 이렇게 하면 고작 한줄 추가됨 ㅠㅠ
table.appendChild(tr);


</script>


</table>

</body>
</html>

6. 그 밖에 알아야할 것들

# selectedIndex

select 태그에서 선택된 값의 위치 또는 순서 index를 알려면 selectedIndex 속성을 사용합니다. 이 속성은 선택된 태그의 index 넘버를 반환해줍니다.

let index = document.getElementById("links").selectedIndex; // 선택된 것의 인덱스값 반환

# JavaScript / 요소 추가하기 / .createElement(), .createTextNode(), .appendChild()

 

JavaScript / 요소 추가하기 / .createElement(), .createTextNode(), .appendChild()

자바스크립트를 이용하여 문서에 HTML 요소를 추가할 수 있습니다. 이 때 필요한 자바스크립트 속성은 다음과 같습니다. .createElement() .createTextNode() .appendChild() .createElement()는 요소를 만듭니다. 

www.codingfactory.net

자바스크립트를 이용하여 문서에 HTML 요소를 추가할 수 있습니다. 이 때 필요한 자바스크립트 속성은 다음과 같습니다.

  • .createElement() : 요소생성                                    // <tr> </tr>
  • .createTextNode() : 선택한 요소에 텍스트를 추가  //   "번호"
  • .appendChild() : 자식 요소로 넣는다.                     //TextNode를 Element의 자식 요소로 넣는다면 <tr> 번호 </tr>

.createElement()는 요소를 만듭니다. 예를 들어

.createElement( 'h1' )

은 다음과 같은 코드를 생성합니다.

<h1></h1>

따라서 테이블을 만들때

 let tr = document.createElement("tr");

라고 쓰면 다음과 같은 코드가 생성됩니다.

<tr></tr>

.createTextNode()는 선택한 요소에 텍스트를 추가합니다. 예를 들어

.createTextNode( 'My Text' )

는 My Text라는 문자열을 만듭니다.

.appendChild()는 선택한 요소 안에 자식 요소를 추가합니다.


다음은 Click이라는 텍스트를 가진 button 요소를 추가하는 예제입니다.

<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>JavaScript</title>
  </head>
  <body>
    <script>
      var jbBtn = document.createElement( 'button' );
      var jbBtnText = document.createTextNode( 'Click' );
      jbBtn.appendChild( jbBtnText );
      document.body.appendChild( jbBtn );
    </script>
  </body>
</html>

각 줄의 의미는 다음과 같습니다.

var jbBtn = document.createElement( 'button' );

button 요소를 만들고 jbBtn에 저장합니다.

var jbBtnText = document.createTextNode( 'Click' );

Click이라는 텍스트를 만들고 jbBtnText에 저장합니다.

jbBtn.appendChild( jbBtnText );

jbBtn에 jbBtnText를 넣습니다.

document.body.appendChild( jbBtn );

jbBtn을 body의 자식 요소로 넣습니다.

 

#getElementsByTagName() 함수

- 자바스크립트 태그명 접근

이 함수는 div, li, p 와 같은 특정 태그명을 가지고 있는 element 의 집합을 가져오는 함수이다.

따라서 반환되는 값은 HTML컬렉션 객체이며 for문 등을 사용하여 element 객체를 사용할수있다.

사용예는 아래와 같다.

<thead>
	<tr>
			<th>첨자</th> <th>a</th> <th> b</th> <th>a x b</th>
	</tr>
</thead>
<tbody>
	<tr>
		<th>0</th><td>5</td><td>33</td>
		<td align="center">
			<button type="button" onclick="multi(0)">계산결과</button>
		</td>
	</tr>
	<tr>
		<th>1</th><td>12</td><td>14</td>
		<td align="center">
			<button type="button" onclick="multi(1)">계산결과</button>
		</td>
	</tr>
	<tr>
		<th>2</th><td>18</td><td>32</td>
		<td align="center">
			<button type="button" onclick="multi(2)">계산결과</button>
		</td>
	</tr>
</tbody>
</table>

<script type="text/javascript">

//getElementsByTagName() :모든 (td)의 데이터에 접근할 수 있음 
let nodeNumbers = document.getElementsByTagName("td");

getElementsByTagName의 괄호에 td 입력시 현재 페이지에 있는 모든 <td>자료를 불러온다.

이때 </td>는 나오지 않고 진짜 <td>만 나온다. 코드에서 <td>가 9개이므로 다음과 같은 코드가 반환된다.

 [td, td, td, td, td, td, td, td, td]  // td 9개

 

 

 

 7. 과제 해설 work 4 ~ 7  

미완성

work4  -  select 사용하여 link 이동하기

answer

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--  내가푼건 좀 오해가 있었음. 클릭시 그냥 넘어가면됨. 밑에 인쇄 X -->
<h3>미술관 및 박물관 링크</h3> 
<br><br>
<select id = "links" onchange = "golink()">
	<option> 대상을 선택 </option>
	<option> 미술관------		</option>
	<option value = "http://sema.seoul.go.kr/"  > 서울 시립 미술관 	</option>
	<option value = "http://www.mmca.go.kr/" > 국립 현대 미술관 	</option>
	<option value = "http://www.sac.or.kr/" > 예술의 전당 		</option>
	<option> 박물관------- 	</option>
	<option value = "http://www.museum.go.kr/" > 국립 중앙 박물관 	</option>
	<option value = "www.museum.seoul.kr/" > 서울 역사 박물관 	</option>
	<option value = "hrrp://www.nfm.go.kr/" > 국립 민속 박물관 	</option>

</select>
<script type="text/javascript">
function golink(){
	
//인덱스 넘버 얻어오기(쓸데없는 인덱스 빼기 위해서) : selectedIndex
	let index = document.getElementById("links").selectedIndex;
//	alert(index); //선택한 것의 인덱스값이 반환됨

//url 가져오기 위해 value값 가져오기
	let url = document.getElementById("links").value; 
	
// index 넘버가 0,1,5가 아닐때 url 가져오기
	if(index != 0 && index != 1 && index != 5){
		location.href = url;
	}

}

</script>
</body>
</html>

work5  -  배열로 테이블 추가하기

answer

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--  데이터가 외부에 있었을 때 외부의 데이터(배열)를 추가하는 방법 -->


    <h3>단가 x 수량 일람표</h3>

    <table border="1" id="mytable">
            <tr>
                <th>번호</th> <th>제품 A</th> <th>제품 B</th> <th>제품 C</th>
            </tr>    
    </table>
 
  <script type="text/javascript">
 //배열의 데이터를 넣어줄거임 ! 자바스크립트 jquery 로 넣는거 가능함.
  let arrA = [23, 45, 11, 36, 27];
  let arrB = [31, 29, 73, 12, 78];
  let arrC = [36, 28, 33, 12, 85];
  
//객체를 얻어오기
  let table = document.getElementById("mytable");
  

//여러번 반복하기 위해 for문
//createElement와 appendChild 설명은 블로그 참조

       for (i = 0; i < arrA.length; i++) {
  	//tr 만들기 (createElement를 통해) 
 	  let tr = document.createElement("tr"); //<tr></tr> 생성
  
// th 넣기
      let th = document.createElement("th"); //<th></th> 생성
      th.appendChild(document.createTextNode(1 + i + ""));//문자열로 넣기 위해 "" 추가
  
// td 넣기
 	let td1 = document.createElement("td");		// <td> <td> 생성
    td1.appendChild(document.createTextNode(arrA[i] + "")); // //문자열로 넣기 위해 "" 추가
  
	 let td2 = document.createElement("td");
     td2.appendChild(document.createTextNode(arrB[i] + ""));

     let td3 = document.createElement("td");
     td3.appendChild(document.createTextNode(arrC[i] + ""));

     tr.appendChild(th); // th를 tr에
     tr.appendChild(td1); //td1을 tr에
     tr.appendChild(td2); //td2를 tr에
     tr.appendChild(td3); //td3를 tr에

     table.appendChild(tr);

 }
  
 </script>

</body>
</html>

work6  -  td태그 접근 + 테이블  추가하기

answer

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<!--  버튼 부분은 함수로, 나머지는 다 미리 테이블에 입력해놓기 -->
<table border = "1">
<col width = "50"> <col width="80"> <col width="80"> <col width="80">

<thead>
	<tr>
			<th>첨자</th> <th>a</th> <th> b</th> <th>a x b</th>
	</tr>

</thead>
<tbody>
	<tr>
		<th>0</th><td>5</td><td>33</td>
		<td align="center">
			<button type="button" onclick="multi(0)">계산결과</button>
		</td>
	</tr>
	<tr>
		<th>1</th><td>12</td><td>14</td>
		<td align="center">
			<button type="button" onclick="multi(1)">계산결과</button>
		</td>
	</tr>
	<tr>
		<th>2</th><td>18</td><td>32</td>
		<td align="center">
			<button type="button" onclick="multi(2)">계산결과</button>
		</td>
	</tr>
</tbody>
</table>

<!--  버튼 부분 구현 부분 -->

<script type="text/javascript">

//1. td데이터에 접근함으로써 필요한 td 인덱스를 확인하기
//getElementsByTagName() :모든 (td)의 데이터에 접근할 수 있음 
let nodeNumbers = document.getElementsByTagName("td");

// 반환 : [td, td, td, td, td, td, td, td, td]

// (1) 버튼에는 a x b 결과가 들어가야하므로, a와 b 값을 얻어와야 한다.
// (2) a,b는 <td>데이터 중 무엇에 해당하는지 확인한다.
//     -> a에 해당되는 값은 5, 12, 18  b에 해당되는 값은 33, 14, 32 인 것을 확인한다.
// (3) 이 숫자 데이터의 번지수를 확인한다.
//     -> 필요한 번지수는 (0 1) (3 4) (6 7) 인것을 확인할 수 있다.
// (4) 번지수의 규칙을 찾아낸다.
//     -> 0, 3, 6 -> 3씩 증가 / 1, 4, 7 -> 3씩 증가
// (5) 이를 배열에 집어넣는다.
//     -> 앞으로 필요한 것을 배열에 입력해놓으면 편할 것이므로!

// 2. 배열 생성한다.
let a = new Array(3);
let b = new Array(3);

// 3. tag의 value값을 배열에 넣는다.
// td의 데이터를 넣은 nodeNumbers의 [i]번지 안의(innerHTML) 값=value 를 배열에 넣는다.
for(i=0; i<a.length; i++){ //3번반복
	a[i] = nodeNumbers[0 + (3 * i)].innerHTML; //번지수가 3씩 증가해야하므로 : 0,3,6번지 반환
	b[i] = nodeNumbers[1 + (3 * i)].innerHTML; // 1,4,7번지 반환
}
/* tag의 value값 잘 나왔는지 확인해보기
	for(i=0; i<a.length; i++){
	console.log("a [" + i +"] = " + a[i]);
	console.log("b [" + i +"] = " + b[i]);
	: 콘솔값 
	a [0] = 5
	b [0] = 33
	a [1] = 12
	b [1] = 14
	a [2] = 18
	b [2] = 32 
}  
*/
// 4. 계산해줄 function 생성한다.
// 위에 테이블에서 multi함수 호출할 때 multi(0),multi(1), multi(2)로 호출했으므로
// 아래 multi()의 괄호 자리에는 클릭하는 버튼의 숫자가 대입될 것이다.
// 두번째 버튼을 클릭했다면 multi(1) 함수가 호출되어 a[1]*b[1]인 12*14의 결과가 도출될 것이다.
function multi(index){  
	let result = parseInt(a[index]) * parseInt(b[index]);
	alert('결과는' + result + '입니다');
}

</script>
</body></html>

work7  -  진수 변경하기

함수를 알면 쉬운 문제

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<!-- 이쁘게 정리하기 위해 테이블로 만든다. -->
<h3>10진수를 2진수, 8진수, 16진수로 변환</h3>

<table>
<tr>
	<th>10진수:</th> <!--  input:입력태그 - value로 받는다 -->
	<td><input type="text" size="30" id="num10"></td>
</tr>
<tr>
	<th>2진수:</th>
	<td><span id="num2"></span></td> <!--  span:일반태그 - innerHTML로 받는다 -->
</tr>
<tr>
	<th>8진수:</th>
	<td><span id="num8"></span></td>
</tr>
<tr>
	<th>16진수:</th>
	<td><span id="num16"></span></td>
</tr>
</table>
<br>
<button type="button" onclick="proc()">결과</button>

<script type="text/javascript">
function proc() {
	
//1. 숫자형변환 : input을 통해 입력받은 value값을 파싱하여 숫자로 형변환한다.(빈칸조사 생략)
	let num10 = parseInt( document.getElementById("num10").value );

//2. 2진수 : toString 함수 사용
	document.getElementById("num2").innerText = num10.toString(2);

//3. 8진수 : toString함수 + 8진수는 앞에 0을 붙여서 출력함
	document.getElementById("num8").innerText = "0" + num10.toString(8);

//4. 17진수: toString함수 + 16진수는 앞에 0x를 붙임 + 16진수는 대문자로 보는게 편함.
	document.getElementById("num16").innerText = "0x" + num10.toString(16).toUpperCase();
}
</script>

</body></html>

실제 서버창

'front-end > javascript' 카테고리의 다른 글

[JSP] EL 표현식  (0) 2023.03.16
[JAVASCRIPT] 자바스크립트 개념알기!  (0) 2023.01.30

댓글