1. jQuery

  • 라이브러리
    - 자주 사용하는 로직을 재사용할 수 있도록 고안된 소프트웨어를 라이브러리라고 한다.
    - 자주 사용하는 코드들을 재사용할 수 있는 형태로 가공해서 프로그래밍 효율을 높여준다.
  • jQuery는 DOM을 내부에 감추고 보다 쉽게 웹페이지를 조작할 수 있도록 돕는 도구
  • 엘리먼트를 선택하는 강력한 방법과 선택된 엘리먼트들을 효율적으로 제어할 수 있는 다양한 수단을 제공하는 자바스크립트 라이브러리
  • 홈페이지 : https://jquery.com

 

1-1. jQuery 사용방법

https://developers.google.com/speed/libraries#jquery

 

Hosted Libraries  |  Google Developers

A stable, reliable, high-speed, globally available content distribution network for the most popular open-source JavaScript libraries.

developers.google.com

 

① Google CDN에서 jQuery 3.x snippet 부분을 복사

 

 

② 이클립스 html 파일의 <head> 부분에 넣어준다.

 

 

 

1-2. jQuery 예시

[예시 코드 1]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
	 <div class="welcome"></div>
	 <div class="welcome"></div>
	 
	 <script type="text/javascript">
	 	$('.welcome').html('hello jQuery!!!');
	 	$('.welcome').css('background-color', 'yellow');
	 </script>
</body>
</html>

 

[출력 결과]

 


 

[예시 코드 2]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
	<ul id="list">
		<li>empty</li>
		<li>empty</li>
		<li>empty</li>
		<li>empty</li>
	</ul>
	<input type="button" id="execute_btn" value="execute">
	<script>
		$('#execute_btn').click(function(){
			$('#list li').text('jQuery Coding!!!');
		});
	</script>
</body>
</html>

 

[출력 결과]

 

 

 


 

 

 

2. jQuery 선택자

- jQuery의 모든 기능은 $라는 객체의 하위로 포함되어 있다.

- "$"는 jQuery의 모든 기능을 담고 있는 객체이자 함수이다.

- jQuery -> $

 

2-1. HTML 요소 획득하기

// id로 선택
// js
document.getElementById("id값");
// jQuery로 변환
$("#id값")

// js
let h1 = document.getElementById("id값");
// jQuery로 변환
let h1 = $("#id값")

// 클래스로 선택
$.(".클래스이름");

// 태그로 선택
$("태그명");

 

2-2. innerHTML의 간결화

// js
h1.innerHTML = "Hello jQuery";
// jQuery로 변환
h1.html("Hello jQuery");

 

2-3. function()

// js
window.onload = function(){ .. 기능 .. }
// jQuery로 변환
$(document).ready(function(){ .. 기능 .. });
// 한 번 더 축약
4(function(){ .. 기능 .. });

 

2-4. 코드 예시

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="http://code.jquery.com/jquery.min.js"></script>
<style>
	.selected{
		background-color : tomato;
		border : 2px solid red;
	}
</style>
</head>
<body>
	 <ul>
	 	<li id="htmlID">HTML</li>
	 	<li class="selectClass">CSS</li>
	 	<li>JavaScript</li>
	 	<li>PHP</li>
	 	<li id="mysqlID">MySql</li>
	 </ul>
	 <script>
	 	//id
// 	 	$('#htmlID').addClass('selected');
	 	
	 	// class
// 	 	$('.selectClass').addClass('selected');
	 	
	 	// tag
// 	 	$('li').addClass('selected');
	 	
	 	// 여러 개
	 	$('#htmlID, .selectClass').addClass('selected');
	 </script>
</body>
</html>

id 'htmlID'와 class 'selectClass' 동시에 선택해 'selected'라는 클래스로 묶어주고 거기에 style을 주었다.

 

[출력 결과]

 

2-5. index 엘리먼트에 대한 선택자

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="http://code.jquery.com/jquery.min.js"></script>
<style>
	.selected{
		background-color : tomato;
		border : 2px solid red;
	}
</style>
</head>
<body>
	<ul id="list">
	 	<li id="htmlID">HTML</li>
	 	<li class="selectClass">CSS</li>
	 	<li>JavaScript</li>
	 	<li>PHP</li>
	 	<li id="mysqlID">MySql</li>
	 </ul>
	 
	 <script>
	 	// list라는 id를 가진 태그 안에 있는 모든 li 태그 선택
 	 	$('#list li').addClass('selected');	// 모든 li 태그에 style이 적용된다.
	 	
	 	// 인자와 인덱스가 동일한 엘리먼트를 찾아내는 선택자
	 	// 2라는 숫자는 index 값(index는 0부터 시작)
 	 	$('#list li:eq(2)').addClass('selected')	// JavaSctip에 style이 적용된다.

		// 인자보다 인덱스가 큰 엘리먼트를 찾아내는 선택자
		// index값이 1을 초과하는 값을 가져온다.
		$('#list li:gt(1)').addClass('selected');	// JavaScript, PHP, MySql에 style이 적용된다.
	 	
	 	//인자보다 인덱스가 작은 엘리먼트를 찾아내는 선택자
	 	// index값이 2보다 작은 값을 가져온다.
		$('#list li:lt(2)').addClass('selected');	// HTML, CSS에 style이 적용된다.
	 	
	 	// 첫번째 인덱스 엘리먼트에 대한 선택자
		$('#list li:first').addClass('selected');	// HTML에 style이 적용된다.
	 	
	 	// 마지막 인덱스 엘리먼트에 대한 선택자
		$('#list li:last').addClass('selected');	// MySql에 style이 적용된다.
	 </script>
</body>
</html>
728x90

'이론 > 자바 풀스택 국비수업' 카테고리의 다른 글

220519 jQuery 3  (0) 2022.07.07
220518 jQuery2  (0) 2022.07.06
220517 Javascript 11  (0) 2022.06.23
220513~16 Javascript 10  (0) 2022.06.23
220513 Javascript 9  (0) 2022.06.23

1. 마우스 이벤트

이벤트명 이벤트 발생 타이밍
click 클릭했을 때 발생
dblclick 더블클릭했을 때 발생
mousedown 마우스를 누를 때 발생
mouseup 마우스 버튼을 땔 때 발생
mousemove 마우스를 움직일 때 발생
mouseover 마우스가 엘리먼트에 진입할 때 발생
mouseout 마우스가 엘리먼트에 빠져나갈 때 발생
contextmenu 콘텍스트 메뉴가 실행될 때 발생 (오른쪽 마우스 클릭)

 

[예제 코드]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	body{
		background-color: black;
		color: white;
	}
	#target{
		width: 200px;
		height: 200px;
		background-color: green;
		margin: 10px;
	}
	table{
		bordeer-collapse: collapse;
		margin: 10px;
		float: Left;
		width: 200px;
	}
	td, th{
		padding: 10px;
		border: 1px solid gray;
	}
</style>
</head>
<body>
	<div id = "target"></div>
	<table>
		<tr>
			<th>event type</th>
			<th>info</th>
		</tr>
		<tr>
			<td>click</td>
			<td id="elmclick"></td>
		</tr>
		<tr>
			<td>dblclick</td>
			<td id="elmdblclick"></td>
		</tr>
		<tr>
			<td>mousedown</td>
			<td id="elmmousedown"></td>
		</tr>
		<tr>
			<td>mouseup</td>
			<td id="elmmouseup"></td>
		</tr>
		<tr>
			<td>mousemove</td>
			<td id="elmmousemove"></td>
		</tr>
		<tr>
			<td>mouseover</td>
			<td id="elmmouseover"></td>
		</tr>
		<tr>
			<td>mouseout</td>
			<td id="elmmouseout"></td>
		</tr>
		<tr>
			<td>contextmenu</td>
			<td id="elmcontextmenu"></td>
		</tr>
	</table>
	
	<script>
		let t = document.getElementById("target");
		
		t.addEventListener('click', handler);
		t.addEventListener('dblclick', handler);
		t.addEventListener('mousedown', handler);
		t.addEventListener('mouseup', handler);
		t.addEventListener('mousemove', handler);
		t.addEventListener('mouseover', handler);
		t.addEventListener('mouseout', handler);
		t.addEventListener('contextmenu', handler);	// 마우스 오른쪽 클릭할 때
		
		function handler(event){
			console.log('-------------------');
			console.log(event.type);
			
			let info = document.getElementById('elm' + event.type);
			let time = new Date();
			let timestr = time.getMilliseconds();
			info.innerHTML = timestr;
		}
	</script>
</body>
</html>

 

[출력 결과]

▶ 마우스 이벤트가 발생하면 console.log에 출력하고 발생 시간을 info에 milliseconds로 표시

▶ milliseconds는 밀리 초를 나타내는 0~999까지의 숫자이다. (밀리 초 : 1000분의 1초)

 

 


 

 

2. form

2-1. 접근 방법

<form name="form1">
    <input type="text" name="user_name" id="user_name">
</form>

 

일반적인 접근 방법 - id를 통한 접근

let input = document.getElementById("user_name");

 

form 객체 획득 후 하위 속성에 접근하는 방법

// form 태그에 지정된 name 속성을 통하여 form 객체를 획득
let myform = document.form1;

// form 태그 객체는 자신이 포함한 하위 태그에 객체를 갖는다.
// name 속성을 통하여 이 하위 객체에 접근할 수 있다.
let user_name = myform.user_name;

// 중간 과정 생략하고 직접 적근하는 방법
let user_name2 = document.form1.user_name;

 

 

 

1-2. value

form 태그에 접근하여 value 값 강제 설정하기

document.form1.user_name.value = 'hgd';

 

value 값 가져오기

console.log(document.form1.user_name.value);

 

가져온 value 값으로 입력 여부 검사하기

if(document.form1.user_name.value){
	alert("이름을 입력해주세요.");
}

 

 

 

2-2. 드롭다운(select 박스)

드롭다운 만들기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form name = "from1">
		<select name = "foo">
			<option>--선택해주세요--</option>
			<option value="item1">항목1</option>
			<option value="item2">항목2</option>
		</select>
	</form>
</body>
</html>

 

[출력 결과]

 

form에 먼저 접근하기

let myform = document.form1;

 

드롭 박스 안 요소에 접근하기

- select 박스 안의 요소들을 하나의 유사 배열로 본다.

- 가장 첫번째 <option> 태그가 0이다.

// 항목1 선택 시
let option1 = myform.foo[1];

 

selectedIndex로 강제 선택

// <select> 태그 객체의 selectedIndex 속성에 임의의 숫자값을
// 대입하면 대입한 위치에 해당하는 <option> 태그가 강제로 선택
myform.foo.selectedIndex = 1;

 

사용자가 선택한 값을 아는 방법

myform.foo[myform.foo.selectedIndex].value;

 

드롭박스 선택 여부 검사

if( myform.foo.selectedIndex < 1 ){
    alert("select box 선택은 필수값입니다.");
}

 

 

 

2-3. radio 버튼

라디오 버튼 만들기

<form name="form1">
    <input type = "radio" name = "gender" value = "M">남자
    <input type = "radio" name = "gender" value = "F">여자
</form>

 

[출력 결과]

 

name 속성을 통하여 접근하기

// radio 버튼은 name 속성의 값을 동일하게 지정하기 때문에, 
// name 속성을 통하여 접근할 경우 유사 배열로 처리된다.
let gender = document.form1.gender[0];

 

선택한 값 가져오기

let genderVal = document.form1.gender[0].value;

▶ 0이면 M, 1이면 F

 

체크 여부 확인

// checked 되어있으면 true, 안되어 있으면 false return
document.form1.gender[0].checked;

// 항목을 강제로 체크하는 경우
document.form1.gender[0].checked = true;

 

라디오 버튼 값 체크하기 로직

// 라디오 버튼 값 체크 변수
let is_check = false;

// 라디오버튼의 길이만큼 체크여부 확인
for(let i = 0; i<document.form1.gender.length; i++){
    // i번째 항목이 체크되어있다면?
    if(document.form1.gender[i].checked){
        is_check = true;
        // 반복문 중단
        break;
    }
}
// 라디오버튼이 체크되어 있지 않다면
if(!is_check){
    alert("성별을 선택해 주세요.");
}

 

 

 

2-4. focus() 지정

입력 항목에 커서가 지정된 상태

focus() 함수를 호출하면 강제로 포커스를 지정

documnet.form1.foo.focus();

 

[예제 코드]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form name="form1">
	 	<input type="text" name="foo" id="foo">
	 </form>
	 
	 <script>
	 	document.form1.foo.focus();
	 </script>
</body>
</html>

 

[출력 결과]

 

 

 

2-5. 작성된 내용 reset하기

form 객체는 작성된 내용을 리셋하기 위한 reset() 함수를 갖는다.

<input type="reset"/> 버튼을 클릭한 것과 동일한 효과를 얻을 수 있다.

document.form1.reset();

 

 

 

2-6. 작성된 내용 전송하기

form 객체의 submit() 함수는 <form> 태그의 action 속성에 명시된 파일로 사용자의 작성 내용을 전송한다.

<input type="submit"/> 버튼을 클릭한 것과 동일한 효과를 얻을 수 있다.

document.form1.submit();

 

작성 내용을 전송하기 전 입력 여부 검사

- <form> 태그는 입력 내용을 웹 프로그램으로 전송하기 직전에 onsubmit 이벤트를 발생시킨다.

- 이 이벤트와 특정 함수를 연결하여 입력 항목에 값을 입력했는지 판단한다.

- 입력이 누락된 항목이 있다면 전송을 취소할 수 있다.

- onSubmit 이벤트는 스스로 내용을 전송하려는 특성을 갖기 때문에, 기본 특성을 해제하기 위하여 함수 연결 후 return false; 처리를 해줘야 한다.  

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	 <form name="form1" onsubmit="doSubmit(); return false;" 
	 	action="http://Localhost/index.html">
	 	<input type="text" name="user_name">
	 	<input type="submit">
	 </form>
	 
	 <script>
	 	function doSubmit(){
	 		if(!document.form1.user_name.value){
				alert("이름을 입력해 주세요");
				document.form1.user_name.focus();
				return false;
	 		}
	 		document.form1.submit();
	 	}
	 </script>
</body>
</html>

 

[출력 결과]

▶ input에 아무것도 입력이 안되어 있으면 alert 창이 뜨고 return false;로 onsubmit 중지시킨다.

▶ value를 입력하면 http://Localhost/index.html로 값이 넘어가지만 서버를 연결해놓지 않았기 때문에 '사이트에 연결 할 수 없음'이 뜬다.

728x90

'이론 > 자바 풀스택 국비수업' 카테고리의 다른 글

220518 jQuery2  (0) 2022.07.06
220518 jQuery 1  (0) 2022.07.06
220513~16 Javascript 10  (0) 2022.06.23
220513 Javascript 9  (0) 2022.06.23
220512 Javascript 8  (0) 2022.06.22

1. 이벤트(event)

이벤트란 어떤 사건을 의미한다.

브라우저에서의 사건이란, 사용자가 클릭 했을 '때', 스크롤 했을 '때', 필드의 내용을 바꾸었을 '때' 등을 의미한다.

https://developer.mozilla.org/en-US/docs/Web/Events

 

Event reference | MDN

Events are fired to notify code of "interesting changes" that may affect code execution. These can arise from user interactions such as using a mouse or resizing a window, changes in the state of the underlying environment (e.g. low battery or media events

developer.mozilla.org

 

[예제 코드]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<input type="button" value="alert" onclick="alert(window.location);">
	<!-- 
		onlick		: 사용자가 버튼을 클릭했을 '때' 실행
		event target	: 이벤트가 일어날 객체를 의미한다. 여기서는 버튼 태그에 대한 객체가 타겟
		event type	: 이벤트의 종류를 의미한다. click이 이벤트 타입
		event handler	: 이벤트가 발생했을 때 동작하는 코드를 의미한다. 
				  여기서는 alert(window.location)이 해당된다.	
	 -->
</body>
</html>

 

[출력 결과]

alert버튼을 클릭하면 window.location 정보를 담은 alert 창이 뜬다.

 

1-1. 인라인(inline) 방식

인라인 방식은 이벤트를 이벤트 대상의 태그 속성으로 지정하는 것

 

[예제 코드]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>10 + 50 = <span id="question"> ? </span> </h1>
	<input type="button" value="결과보기" 
		onclick="printResult();">
		
	<script>
		// 결과보기 버튼 클릭시, 10 + 50의 결과 값을 '?' 안에 넣어줄것
		function printResult() {
			let result = sum(10, 50);
			
			// id로 접근
			let mytag = document.getElementById("question");
			mytag.innerHTML = result;
		}
		
		function sum(x, y){
			return x + y;
		}
	</script>
</body>
</html>

 

[출력 결과]

 

 

 

1-2. 자기 자신 참조하기

  • 방법 1 : getElement~로 참조하기. 따로 지정될 id나 class 등을 명시해야 해서 불편하다.
  • 방법2 : this로 참조하기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 자기 자신을 참조하는 불편한 방법 -->
	<input type="button" id="target" 
		onclick="alert('event_1 : ' + document.getElementById('target').value);" 
		value="button"/>
        
	 <!-- this를 통해서 간편하게 참조하는 방식 -->
    	 <!-- 이벤트가 발생한 대상을 필요로 하는 경우, this를 통해서 참조할 수 있다 -->
	<input type="button" 
		onclick="alert('event_1 : ' + this.value);"
	 	value="button">
</body>
</html>

 

[출력 결과]

▶ 두 개의 버튼 모두 방법은 다르지만 동일한 결과를 출력한다.

 

 

 

1-3. 프로퍼티 리스너

이벤트 대상에 해당하는 객체의 프로퍼티로 이벤트를 등록하는 방식이다.

인라인 방식에 비해서 HTML과 Javascript를 분리할 수 있다는 점에서 선호되는 방식이지만, 뒤에서 배울 addEventListener 방식을 추천한다. 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<input type="button" id="target" value="button" />
	<script>
	 	let t = document.getElementById('target');
	 	t.onclick = function(){
	 		alert('Hello world');
	 	}
	</script>
</body>
</html>

 

[출력 결과]

 

function()에 보통 파라미터로 event를 넣는다.

이것을 console.log(event)로 출력해 봄으로써 이벤트가 발생할 때의 정보 확인이 가능하다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<input type="button" id="target" value="button" />
	<script>
	 	let t = document.getElementById('target');
	 	
	 	t.onclick = function(event){
	 		alert('Hello world : ');
	 		console.log(event);
	 	}
	</script>
</body>
</html>

target :&nbsp; input#target 안의&nbsp;defaultValue :&nbsp; "button"

 

이벤트가 실행된 맥락의 정보가 필요할 때는 이벤트 객체를 사용한다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<input type="button" id="target" value="button" />
	<script>
	 	let t = document.getElementById('target');
	 	
	 	t.onclick = function(event){
	 		alert('Hello world : ' + param.target.value);
	 	}
	</script>
</body>
</html>

 

[출력 결과]

 

 

 

1-4. addEventListner()

이벤트를 등록하는 가장 권장되는 방식이다. 이 방식을 이용하면 여러 개의 이벤트 핸들러를 등록할 수 있다.

▶ 이벤트 핸들러란?

"어떠한 사건에 대한 동작을 다룬다"는 의미
"마우스가 버튼에 닿았을 때"는 사건(Action)
"마우스가 버튼에 닿으면 버튼 색이 파란색으로 변한다"는 사건에 대한 동작
이 두 개를 묵은 것이 이벤트 핸들러이다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	 <input type="button" id="target" value="button" />
	 <script>
	 	let t = document.getElementById('target');
	 	t.addEventListener('click',function(){
	 		alert('Hello world!!!');
	 	});
	 </script>
</body>
</html>

 

[출력 결과]

 

 

 

1-5. 이벤트 함수 실행하기

[예제 코드 1]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<input type="button" id="target1" value="button1">
	
	<script>
		let t1 = document.getElementById('target1');
		
		function btn_listener(event){
			alert("button 클릭! : " + event.target.id);
		}
	
		t1.addEventListener('click', btn_listener );
	</script>
</body>
</html>

▶ gtn_listner 함수 뒤 괄호()는 써주지 않아도 된다.

 

[출력 결과 1]

 

[예제 코드 2]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<input type="button" id="target1" value="button1"/>
	<input type="button" id="target2" value="button2"/>
	
	<script>
		function btn_listener(event){
			switch (event.target.id) {
				case 'target1':
					alert("target1 클릭!!");
					break;
				case 'target2':
					alert("target2 클릭!!");
					break;
			}
		}
		
		let t1 = document.getElementById("target1");
		let t2 = document.getElementById("target2");
		
		t1.addEventListener('click', btn_listener);
		t2.addEventListener('click', btn_listener);
	</script>
</body>
</html>

▶ addEventListener 방식으로 클릭 이벤트 등록
▶ btn_listener 실행 및 내부 분기처리 
▶ target1 클릭 시 -> alert(target1 클릭!!);
▶ target2 클릭 시 -> alert(target2 클릭!!);

 

[출력 결과 2]

 

 

 

1-6. property 방식과 listner 방식 비교

action(), action2() 함수를 각각 property 방식과 listner방식으로 실행해 봄으로써 차이점을 알 수 있다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<input type="button" id="target1" value="property">
	<input type="button" id="target2" value="listener">
	
	<script>
		function action(){
			alert('click!!');
		}	
		
		function action2(){
			alert('클릭!!');			
		}
	
		// property
		document.getElementById("target1").onclick = function(){
			action();
		}
		document.getElementById("target1").onclick = function(){
			action2();
		}
		
		// listener
		document.getElementById('target2').addEventListener('click',action);
		document.getElementById('target2').addEventListener('click',action2);
	</script>
</body>
</html>

 

[출력 결과 1]

▶ property 방식은 마지막 action2()만 동작하는 것을 볼 수 있고

▶ listner 방식은 action()과 action2()가 차례로 동작하는 것을 볼 수 있다.

▶ properety 방식은 일종의 덮어쓰기로 마지막 함수만 호출이 되고, listner방식은 add 해줌으로써 두 함수가 차례로 동작한다. 

 

add되어 있는 이벤트는 remove도 가능하다.

document.getElementById('target2').removeEventListener('click',action);

▶ action2() 이벤트는 지워지고 action()만 실행되어 'listner' 버튼을 누르면 alert('click!!')만 뜬다.

 

 

 

1-7. 기본 동작의 취소

웹 브라우저의 구성요소들은 각각 기본적인 동작 방법을 가지고 있다.

기본 동작에 대한 기본 이벤트들을 취소할 수 있다.

 

[예제 코드 - 기본 이벤트 작성]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	 <p>
	 	<label>prevent event on</label>
	 	<input type="checkbox" id="prevent">
	 </p>
	 <p>
	 	<a href="http://www.naver.com">naver</a>
	 </p>
 	<form action="http://www.naver.com">
 		<input type="submit">
 	</form>
</body>
</html>

 

[출력 결과]

▶ 체크박스 클릭 여부에 상관없이 링크 또는 submit 버튼을 클릭하면 연결된 링크(네이버)로 이동한다.

 

[예제 코드 - 체크박스 체크 시 링크와 submit 제출 이벤트 취소 - 인라인 방식]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p>
		<label>prevent event on</label>
		<input type="checkbox" id="prevent">
	</p>
    
	<!-- inline 방식 -->
	<!-- 
		checked	: true 	-> 체크가 되어 있는 상태 
    			: false -> 체크가 되어 있지 않은 상태
	-->
	<p>
		<a href="http://www.naver.com"
			onclick="if(document.getElementById('prevent').checked) return false;">
		naver</a>
	</p>
	<form action="http://www.naver.com"
		onsubmit="if(document.getElementById('prevent').checked) return false;">
		<input type="submit">
	</form>
</body>
</html>

 

[출력 결과]

▶ 체크박스가 체크되어 있으면 "document.getElementById('prevent').checked"가 ture가 되어 if문이 실행되고 false가 리턴됨으로써 이벤트가 실행되지 않는다.

 

[예제 코드 - 체크박스 체크 시 링크와 submit 제출 이벤트 취소 - property 방식(onclick)]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	 <p>
	 	<label>prevent event on</label>
	 	<input type="checkbox" id="prevent">
	 </p>
	 <p>
	 	<a href="http://www.naver.com" id="select">naver</a>
	 </p>
 	<form action="http://www.naver.com" id="sel2">
 		<input type="submit">
 	</form>
 	
 	<script>
 		document.getElementById('sel1').onclick = function(){
 			if( document.getElementById('prevent').checked ){
 				return false;
 			}
 		}
 		document.getElementById('sel2').onclick = function(){
 			if( document.getElementById('prevent').checked ){
 				return false;
 			}
 		}
 	</script>
</body>
</html>

 

[예제 코드 - 체크박스 체크 시 링크와 submit 제출 이벤트 취소 - addEventListner 방식(click / submit)]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	 <p>
	 	<label>prevent event on</label>
	 	<input type="checkbox" id="prevent">
	 </p>
	 <p>
	 	<a href="http://www.naver.com" id="sel1">naver</a>
	 </p>
 	<form action="http://www.naver.com" id="sel2">
 		<input type="submit">
 	</form>
 	
 	<script>
 		// click
 		document.getElementById('sel1').addEventListener('click',function(event){
 			if( document.getElementById('prevent').checked ){
 				event.preventDefault();
 			}
 		});
 		
        	// submit
 		document.getElementById('sel2').addEventListener('submit',function(event){
 			if( document.getElementById('prevent').checked ){
 				event.preventDefault();
 			}
 		});
 	</script>
</body>
</html>

▶ event.preventDefault()를 호출하면 일반적으로 기존의 액션이 진행되지 않아 해당 이벤트가 발생하지 않는다.

 

 

1-8. change

폼 컨트롤의 값이 변경되었을 때 발생하는 이벤트

입력을 끝내고 focus를 빠져나왔을 때 발생한다. 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	 <p id="result"></p>
	 <input type="text" id="target">
	 
	 <script>
	 	let t = document.getElementById('target');
	 	t.addEventListener('change',function(event){
	 		document.getElementById('result').innerHTML = event.target.value;
	 	});
	 </script>
</body>
</html>

 

[출력 결과]

 

 

 

1-9. focus, blur

  • focus : 엘리먼트에 포커스가 생겼을 때
  • blur : 포커스가 사라졌을 때
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	 <input type="text" id="target" />
	 <script>
	 	let t = document.getElementById("target");
        
        // blur
	 	t.addEventListener('blur',function(){
	 		console.log('blur');
	 	});
        
        // focus
	 	t.addEventListener('focus',function(){
	 		console.log('focus');
	 	});
	 </script>
</body>
</html>

 

[출력 결과]

 

 

 

1-10. submit 전송 취소

submit : 폼 정보를 서버로 전송하는 명령어인 submit 시에 일어나고 form 태그에 적용된다.

아무것도 입력하지 않고 전송버튼을 눌렀을 때 submit 이벤트를 취소시키는 코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	 <form action="result.html" id="target">
	 	<label>
	 		name : <input type="text" id="name">
	 		<input type="submit">
	 	</label>
	 </form>
	 <script>
	 	let t = document.getElementById("target");
	 	t.addEventListener('submit',function(event){
			if( document.getElementById("name").value.length == 0 ){
				alert("Name 필드의 값이 누락되었습니다.");
				event.preventDefault();
			}	 		
	 	});
	 </script>
</body>
</html>

 

[출력 결과]

▶ 빈 칸으로 제출하면 alert창 띄운 후 submit 전송 취소

▶ 내용을 적어 submit 전송시키면 result.html로 넘어가지만 현재 파일이 없기 때문에 파일에 액세스 할 수 없다고 뜬다

728x90

'이론 > 자바 풀스택 국비수업' 카테고리의 다른 글

220518 jQuery 1  (0) 2022.07.06
220517 Javascript 11  (0) 2022.06.23
220513 Javascript 9  (0) 2022.06.23
220512 Javascript 8  (0) 2022.06.22
220512 Javascript 7  (0) 2022.06.22

1. window 객체

전역객체

자바스크립트의 모든 객체는 window 객체의 하위 객체로서 존재한다.

그러므로 내장 객체에 대한 접근 방법은 window.내장객체이름.함수이름();이 올바르나,

모든 객체가 window 안에 내장되어 있기 때문에, window 객체를 명시적으로 선언하는 것은 생략이 가능하다.

내장객체이름.함수이름();

 

  • BOM(Browser Object Model)
    웹 브라우저의 창이나 프레임을 추상화해서 프로그래밍적으로 제어할 수 있도록 제공하는 수단이다.
  • DOM(Document Object Model)
    BOM 소속인데, 자주 사용되고 중요한 객체여서 따로 분리되었다.
  • JavaScrip
    웹에서 쓰일 때 사용되는 프로퍼티, 객체들  

 

 

 

1-1. window.open() 함수

JavaScript 모든 기능이 window 객체의 하위기능이기도 하지만, 그 중 브라우저의 창을 제어하는 것과 관련된 open() 함수가 window 객체에 직접적으로 포함되어 있다.

<h1>window 객체</h1>
<h3>open 메소드 확인</h3>
<div>
    <a href="#" onclick = "open1(); return false;">새창열기</a>
    <br/>
    <a href="#" onclick = "open2(); return false;">팝업열기</a>
    <br/>
    <a href="#" onclick = "open3(); return false;">팝업열기2</a>
</div>

// 새로운 창 열기
// window.open("페이지 url")
function open1(){
        window.open('http://www.naver.com');
}

// 팝업창 형태로 창을 열 경우
// window.open("페이지url", "창이름", "옵셥")
function open2(){
    window.open('http://www.naver.com', '', 
            'width=300, height=500, scrollbars=no,toolbar=no, menubar=no, status=no, location=no');
}

// 한 번 생성된 팝업창을 지속적으로 재사용하는 팝업창
function open3(){
    window.open('http://www.naver.com', 'mywin', 
            'width=300, height=500, scrollbars=no,toolbar=no, menubar=no, status=no, location=no');
}

 

[출력 결과]

 

 

 

1-2. Location 객체

Location 객체는 웹 브라우저의 주소 표시줄을 제어한다.

document.write("<p>문서의 url 주소 : " + location.href + "</p>");
// 웹페이지 기본 port는 80번이고 80번은 조회가 되지 않는다.
document.write("<p>호스트 이름과 포트 : " + location.host + "</p>");
document.write("<p>프로토콜 종류 : " + location.protocol + "</p>");
document.write("<p>URL 조회 : " + location.search + "</p>");
document.write("<p>디렉토리 이하 경로 : " + location.pathname + "</p>");

 

[출력 결과]

 

[예제 코드]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<input type="button" value="네이버로 이동하기" onclick="goNaver()"/>
	<script>
		function goNaver(){
			location.href = "http://www.naver.com";
		}
	</script>
</body>
</html>

▶ 네이버로 이동하기 버튼을 클릭하면 location.href에 명시한 주소로 이동한다.

 

[실습 코드]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<!-- onload : 페이지 최초 로딩시, authNo() 함수를 호출 -->
<body onload="authNo()">
	<!-- 
		문제. 0~9 사이의 랜덤 5자리 인증번호를 id값이 "auth"인 요소에서 출력
		document.getElementById("auth").innerHTML = 랜덤숫자;
	 -->
	<p>
		고객님의 인증번호는 <strong id ="auth">00000</strong>입니다.
	</p>
	
	<input type="button" value="인증번호 새로 받기" onclick="refresh();"/>
	
	<script>
		function refresh(){
			// location 객체 안에 포함된 reload()함수는 현재 페이지를 새로고침한다.
			location.reload();
		}
		
		// 두 수 사이의 랜덤값을 리턴하는 함수
		function random(n1, n2){
			return parseInt(Math.random()*(n2 - n1 + 1)) + n1;
		}
		
		// 5가지 인증번호 return해주는 함수
		function authNo(){
			let value = "";
			for(let i = 0 ; i<5; i++){
				value += random(0,9);
			}
			
			document.getElementById("auth").innerHTML = value;
		}
	</script>
</body>
</html>

 

[출력 결과]

▶ 페이지 최초 로딩시 authNo() 함수를 실행한다.

▶ '인증번호 새로 받기' 버튼을 클릭하면 refresh() 함수를 실행하여 페이지를 새로고침한다.

▶ 페이지가 새로고침되면서 다시 authNo() 함수가 실행된다. 

 

 

 

1-3.history 객체

history 객체는 브라우저의 "뒤로", "앞으로" 버튼의 기능을 수행하는 객체로써, back() 함수와 forward() 함수를 내장하고 있다.

  • 이전 페이지로 이동하기 : history.back();
  • 다음 페이지로 이동하기 : history.forward();

 

[예제 코드]

- window5.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>History 객체</h1>
	<a href="history.html">페이지 이동</a><br>
	<a href="#" onclick="history.forward(); return false;">
		앞 페이지로 이동
	</a>
</body>
</html>

 

- history.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>History 객체</h1>
	<a href="#" onclick="history.back(); return false;">
		이전 페이지로 이동
	</a>
</body>
</html>

 

[출력 결과]

▶ 페이지 이동 클릭 시 <a href>로 지정한 history.html로 페이지가 이동된다.

▶ 이전 페이지로 이동 클릭 시 history.back() 함수가 실행되어 window5.html로 돌아온다.

▶ window5.html에서 앞페이지로 이동 클릭 시 history.forward() 함수가 실행되어 앞페이지(history.html)로 돌아간다.

 

 

 

1-4. navigator

브라우저의 정보를 조회하는 내장 객체

하나의 웹서비스로 다양한 브라우저를 지원할 수 있도록 처리하기 위한 기본이 되는 정보를 추출할 수 있다.

  • navigator.appName : 브라우저 이름
  • navigator.appCodeName : 브라우저 코드명
  • navigator.platform : 플랫폼 정보
  • navigator.appVersion : 브라우저 정보
  • navigator.userAgent : 사용자 정보

 

 


 

 

2. document

2-1. document.getElementsByTagName

문서 내에서 특정 태그에 해당되는 객체를 찾는 방법은 여러가지가 있다.

인자로 전달된 태그명에 해당하는 객체들을 찾아서 그 리스트를 유사배열에 담아서 반환한다.

 

[예제 코드 1]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	 <ul>
	 	<li>HTML</li>
	 	<li>CSS</li>
	 	<li>JavaScript</li>
	 </ul>
	 
	 <script>
	 	let list = document.getElementsByTagName("li");
	 	for(let i = 0; i < list.length; i++){
	 		list[i].style.color = 'tomato';
	 	}
	 </script>
</body>
</html>

 

[출력 결과 1]

 

[예제 코드 2]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<ul>
		<li>HTML</li>
		<li>CSS</li>
	 	<li>JavaScript</li>
	</ul>
	<ol>
		<li>HTML</li>
		<li>CSS</li>
	 	<li>JavaScript</li>
	</ol> 
    
	<script>
		let ul = document.getElementsByTagName('ul')[0];
		let lis = ul.getElementsByTagName('li');
		for(let i = 0; i < lis.length; i++){
			lis[i].style.color = 'tomato';
		}
	</script>
</body>
</html>

▶ ul 태그에서도 1depth 더 들어가 li 태그 지정 후 스타일 준 형태

 

[출력 결과 2]

 

 

 

2-2. document.getElementsByClassName

class 속성의 값을 기준으로 객체를 조회

 

[예제 코드]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<ul>
		<li>HTML</li>
		<li class = "active">CSS</li>
	 	<li class = "active">JavaScript</li>
	</ul>
	
	<script>
		let lis = document.getElementsByClassName('active');
		for (let i = 0; i < lis.length; i++) {
			lis[i].style.color = 'powderblue';			
		}
	</script>
</body>
</html>

 

[출력 결과]

 

 

 

2-3. document.getElementById

id 값을 기준으로 객체를 조회한다. 성능면에서 가장 우수

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<ul>
		<li>HTML</li>
		<li id = "active">CSS</li>
	 	<li>JavaScript</li>
	</ul>
	
	<script type="text/javascript">
		let li = document.getElementById('active');
		li.style.color = 'tomato';
	</script>
</body>
</html>

 

[출력 결과]

 

728x90

'이론 > 자바 풀스택 국비수업' 카테고리의 다른 글

220517 Javascript 11  (0) 2022.06.23
220513~16 Javascript 10  (0) 2022.06.23
220512 Javascript 8  (0) 2022.06.22
220512 Javascript 7  (0) 2022.06.22
220511 Javascript 6  (0) 2022.06.22

1. String 내장 객체

 

[예제 코드]

let url = "http://www.naver.com";
document.write("<p>문자열 : " + url + "</p>");

let len = url.length;
document.write("<p>문자열의 길이 : " + len + "</p>");

let position = url.indexOf("/");
document.write("<p>'/' 가 처음 나타나는 위치 : " + position + "</p>");

let up = url.toUpperCase();
document.write("<p>모든 글자 대문자 : " + up + "</p>");

let down = url.toLowerCase();
document.write("<p>모든 글자 소문자 : " + down + "</p>");

 

[출력 결과]

 

 

 

2. HTML 안에서 JS 사용

2-1. Inline방식

태그에 직접 자바스크립트를 기술하는 방식.

장점은 태그에 연관된 스크립트가 분명하게 드러난다는 점이다.

하지만 정보(HTML)와 제어(Javascript)가 섞여있기 때문에 정보로서의 가치가 떨어진다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	#selected{
		color: red;
	}
	.dark{
		background-color: black;
		color: white;
	}
	.dark #selected{
		color: yellow;
	}
	
</style>
</head>
<body>
	<ul>
		<li>HTML</li>
		<li>CSS</li>
		<li id="selected">JavaScript</li>
	</ul>
	<input type="button" 
		onclick="document.body.className='dark'"
		value = "dark">	
</body>
</html>

▶ onclick은 자바스크립트에서의 이벤트 요소

▶ document.body.className='dark'는 자바스크립트

 

[출력 결과 - 클릭 전]

 

[출력 결과 - 클릭 후]

 

 

 

2-2. <script> 태그 이용

<script> 태그를 만들어서 여기에 자바스크립트 코드를 삽입하는 방식. 장점은 html 코드와 js 코드를 분리할 수 있다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <!-- <scirpt> 태그 이용 -->
    <!-- document의 id가 hw인 곳에서 click 이벤트 발생 시 function() 실행 -->
    <input type="button" id="hw" value="Hello">

    <script>
        let hw = document.getElementById('hw');
        hw.addEventListener('click',function(){
            alert("Hello world");
        });
    </script>
    
    <!-- Inline 방식 -->
    <input type="button" onclick="alert('Hello world');" value="Hello">
</body>
</html>

 

 

 

 

2-3. JS 파일 분리

이클립스에서는 'Untitled Text File'로 만든다.

JS파일 안에는 순수한 자바스크립트만 들어간다.

HTML 파일에서는 <script> 태그 안 src에 JS파일 주소만 연결해준다.

 

 

 

 

2-4. 로드 순서에 따른 오류

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<script>
		let hw = document.getElementById('hw');
		hw.addEventListener('click',function(){
			alert("Hello world");
		});
	</script>
	
	<input type="button" id="hw" value="Hello">
</body>
</html>

 

위 코드와 같이 실행 시, Uncaught TypeError: Cannot read properties of null (reading 'addEventListener') 라고 에러가 출력된다.

위에서 아래 방향으로 진행되는 코드 특성 상, script 태그 안에서 'hw' id를 가져오려고 해도 맨 아래에 있어 아직 가져올 수 없기 때문에 에러가 난다.

이 경우 window.onload = function(){}으로 해결 가능하다.

 

 

 

2-5. window.onload = function(){}

웹 브라우저의 모든 구성요소에 대한 로그가 끝났을 때 브라우저에 의해서 호출되는 함수(이벤트)

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<script>
		window.onload = function(){
			let hw = document.getElementById('hw');
			hw.addEventListener('click',function(){
				alert("Hello world");
			});
		}
	</script>
	
	<input type="button" id="hw" value="Hello">
</body>
</html>

 

2-4의 코드를 그대로 가져와 window.onload = function(){} 안에 넣어주었다. 이렇게 되면 <input> 태그 요소가 브라우저에 로그된 후에 실행되므로 문제없이 작동한다.

JS 파일로 따로 빼어도 정상작동한다.

 

728x90

'이론 > 자바 풀스택 국비수업' 카테고리의 다른 글

220513~16 Javascript 10  (0) 2022.06.23
220513 Javascript 9  (0) 2022.06.23
220512 Javascript 7  (0) 2022.06.22
220511 Javascript 6  (0) 2022.06.22
220511 Javascript 문제  (0) 2022.06.21

+ Recent posts