JavaScript (3) : jQuery 라이브러리 이벤트 처리 + Ajax

부트캠프(END)/Web|2022. 8. 4. 10:08

 

 

DOMScript

DOM(Document Object Model)

웹페이지에서 자바스크립트로 요소들을 제어하는 데 사용된다.

웹 개발에서 사용되는 documnet 객체 또한 브라우저에서 제공하는 window객체의 한 요소다.

그리고 그 DOM, window.document 내에 HTML을 구성하는 하나하나의 요소가 담겨 있다.

 

jQuery는 그 요소들을(HTML DOM Tree) 간단하게 제어하여,

쉽게 이벤트를 처리할 수 있게 돕는 javascript의 라이브러리!

 

보통 <script> 태그 내에서 $ 기호를 사용하면 거의 jQuery라고 보면 된다.

즉 document.querySelector("")를 $("")처럼 간단하게 나타낼 수 있도록 해 주는 게 jQuery! 

 

jQuery를 사용하기 위해서는 JSP 페이지 <head> 태그 내에 아래 코드를 한 줄 삽입해야 한다.

<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>

 

<script> 태그 내에 아래와 같은 코드를 넣고 그 안에 기능을 구현하면,

브라우저가 실행됨과 동시에 그 함수들은 호출되어 준비된 상태가 된다. 다 똑같습니다~

 

⑴ $(function(){})

⑵ $(document).ready(function(){})

⑶ window.onload=function(){} 

<script type="text/javascript">
$(function() {
  원하는 기능
}
$(document).ready(function(){
  원하는 기능
})
window.onload=function(){
  원하는 기능
}
</script>

 

요소 선택하기

이벤트를 처리하기 위해서는 어떤 요소에서 일어나는 이벤트인지 특정하기 위해 요소를 선택해야 한다. 

=> 태그명($(태그명)), 아이디명($(#아이디명)), 클래스명($(.클래스명))
=> 인접 ($(태그명 + 태그명)), 후손($(태그명 태그명)), 자손 ($(태그명>태그명))

  • $('input[type="button"]') 
    type이 button인 input 태그를 선택한다. == <input type="button">
  • $('#id')
    id 가 "id"인 태그를 선택한다. ==  <div id="id">
  • $('.class')
    class가 "class"인 태그를 선택한다. == <div class="class">
  • $('table > tr') , $('table tr') $('p+div')
    table 태그 아래의 tr 태그, p태그의 인접한 div 태그를 선택한다.

 

데이터 읽기

val() : 태그에 입력된 값을 읽는다.

<input type="text"> 영역에 입력된 값, value속성에 부여된 값(=text)을 읽어 온다.

val()로 가져올 수 있는 것 : <input type=text, password, file, date, select, textarea>

 

text() : 태그 사이에 들어간 값을 읽는다.

<td>JQuery</td> → $('td').text()

값을 집어 넣고 싶을 때는 $('h1').text("hello") 이렇게.

 

attr(속성이름) : 속성에 부여된 값을 읽어 온다.

<a href="data" class=""><img src="data" width="" height="">

$('a').attr('href')  $('img').attr('src')

 

css() : 요소의 css를 변경한다.

$('a').css("color":"green") → a태그의 글자 색깔을 녹색으로 변경하겠다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
<script type="text/javascript">
	$(function(){
		$('h1').css("color","red");
		$('#a').css("color","blue");
		$('#b').css("backgroundColor","yellow");
		$('.c').css("color","green");
	})
</script>
</head>
<body>
	<h1>Hello JQuery!</h1>
	<h1 id="a">Hello JQuery!</h1>
	<h1 id="b">Hello JQuery!</h1>
	<h1 class="c">Hello JQuery!</h1>
	<h1 class="c">Hello JQuery!</h1>
</body>
</html>

 

https://www.w3schools.com/jquery/html_html.asp

어떤 태그 안에 있는 html코드 전체를 가져오는 것도 가능하다.

<ul>
  <li><a href="#">Home</a></li>
  <li><a href="#">Door</a></li>
  <li><a href="#">Room</a></li>
</ul>

$('ul').html() 하면 ul태그 내에 있는 html을 다 가져 온다. 

 

 

이벤트 종류

이벤트는 크게 onclick / onmouseover / hover / onchange / onkeydown / onkeyup 등이 있다.

 


onclick

해당 요소를 클릭했을 때 발생하는 이벤트를 지정할 수 있다.

 

 

$("tagName").click(function(){
  처리내용
})
$("tagName").on("click",function(){
  처리내용
})

 

<예시>

id가 ok인 버튼을 클릭하면 국어, 영어, 수학의 점수를 계산하여 총합을 #print 요소에 출력한다.

또한 만약 #id 요소의 값이 비어 있으면 #note 요소에 아이디를 입력하라는 메시지를 띄워 준다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet"
	href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
<script type="text/javascript">
	$(function() {
		$('#kor').val(90); //초기값 부여
		$('#ok').on("click", function(){
			let kor=$('#kor').val(); //입력값을 가져 온다.
			let eng=$('#eng').val();
			let math=$('#math').val();
			let total = Number(kor) + Number(eng) + Number(math);
			
			$('#print').text(total);
		})
		$('button').click(function(){
			let id = $('#id').val();
			if(id==""){
				$('#note').text("아이디를 입력하세요.");
			}
		})
		let value=$('a').attr("href"); //속성값 가져오기
		let value2=$('a').text(); //태그사이값 가져오기
		window.alert(value+","+value2);
	})
</script>
</head>
<body>
	<div class="container">
		<div class="row">
			국어:<input type=text id="kor" size=10 class="input-sm"><br>
			영어:<input type=text id="eng" size=10 class="input-sm"><br>
			수학:<input type=text id="math" size=10 class="input-sm"><br>
			<span id="print"></span><input type="button" id="ok" value="계산">
			<br>
			ID:<input type=text id=id size=15 class="input-sm">
			<button class="btn btn-sm btn-primary">로그인</button><br>
			<span id="note" style="color:red"></span>
			<a href="Hello_Href">Hello_text</a>
		</div>
	</div>
</body>
</html>

 


hover

 

해당 요소에 커서가 올라갔을 때 발생하는 이벤트를 처리한다.

$("tagName").hover(function(){
   처리내용
})

 

<예시>

이미지 요소의 기본 불투명도를 0.3으로 세팅하고,

이미지 요소에 커서가 올라가면 "pointer(손가락)" 형태로 변경되도록 하며,

이미지 요소에 커서가 올라가면 불투명도를 1.0으로 변경하게 해 준다. (더 선명하게 보이도록)

그리고 커서가 내려왔을 때는 다시 모든 이미지 요소의 불투명도를 0.3으로 변경한다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
<script type="text/javascript">
$(function(){
	$('img').css("opacity",0.3);
	$('img').css("cursor","pointer");
	//이벤트 처리
	$('img').hover(function(){
		$(this).css("opacity",1.0);// opacity: 투명 => 0.0~1.0
		// this => 선택된 img (동작하는 태그)
	}, function(){
		$('img').css("opacity",0.3);
	})
})
</script>
<style type="text/css">
	img {
	width:150px;
	height:150px;
	}
</style>
</head>
<body>
	<img src="m (1).png">
	<img src="m (2).png">
	<img src="m (3).png">
	<img src="m (4).png">
	<img src="m (5).png">
	<img src="m (6).png">
	<img src="m (7).png">
</body>
</html>

 

onchange

select태그에서 많이 나온다.
선택한 옵션이 바뀌었을 때 발생할 이벤트를 제어한다.

<select> 
  $('tagName').change(function(){
  처리내용~
  })
</select>

 

onkeydown, onkeyup

사용자의 키보드 입력 액션에 따라 발생하는 이벤트를 제어한다.

-down : 이벤트 발생 후 값이 입력됨 - 채팅 기능에서 많이 사용
-up : 값이 입력된 후 이벤트가 발생 - 서치바 기능에서 많이 사용

 

 

 

Ajax

Asynchronous Javascript and XML 의 준말로, 동적인 웹페이지 개발을 위한 기술이다.

Ajax를 활용하면 지금까지 JSP 페이지에서와 달리, 페이지 새로고침 없이 데이터를 처리할 수 있다!

즉, 웹 페이지가 로드된 후에도 서버와 데이터를 주고받을 수 있도록 해 준다.

아래와 같은 형태로 구현할 수 있다.

 

$.ajax({
  type : 'post', //데이터 전송 방식 결정(POST/GET)
  url : 'function_page.jsp',//처리할 URL 주소 (.do)
  data : {"data1":data1, "data2":data2}, //어떤 데이터를 처리할 건지
  //success/error :  정상수행/에러발생했을때 어떻게 할건지
  success:function(result){
    console.log(result);
  },
  error:function(ex){}
})

 

더 자세한 개념은 여기 참고! → http://www.tcpschool.com/ajax/intro

 

 

<예시>

https://dev-doodoo.tistory.com/194 에서 삭제 기능을 구현한 부분

$.ajax({
    type: 'post',
    url: '../freeboard/delete.do',
    data: {
        "no": no,
        "pwd": pwd
    }, //../freeboard/delete.do?no=1&pwd=1234 이렇게 보내줌
    success: function(result) { //delete.do에 출력한 html을 읽어서 result에 담는다.
        let res = result.trim(); //공백제거 꼭 필요함
        console.log(res);
        if (res == "yes") {
            location.href = "../freeboard/list.do"; //sendRedirect()
        } else {
            alert("비밀번호가 틀립니다.")
            $('#delPwd').val(""); //비밀번호 입력칸 비우기
            $('#delPwd').focus(); //포커스 갖다 놓기
            return;
        }
    },
    error: function(err) {
        alert(err);
    }
})

 

댓글()