1. 이벤트 대상 : 이벤트가 동작하는 HTML 구성 요소
this(JavaScript 객체), 이벤트 객체의 target 속성
2. 이벤트 타입 : 이벤트 종류
3. 이벤트 리스너 : 이벤트가 발생하면 동작하는 함수
4. 이벤트 객체 : 발생한 이벤트의 상세 정보를 가지고 있는 객체
1) bind()
2) live()
3) delegate()
1) on()
(1) 표준 이벤트 모델이므로(addEventListener) 하나의 이벤트 타입에 여러 개의 이벤트 리스너를 등록할 수 있다.
(2) 형식
① 일반적인 요소
이벤트대상.on('이벤트타입', 이벤트리스너)
② 이벤트로 생성한 동적 요소
부모요소.on('이벤트타입', 이벤트대상, 이벤트리스너)
2) one()
(1) 한 번만 동작하는 이벤트를 작성할 수 있다.
(2) 형식
이벤트대상.one('이벤트타입', 이벤트리스너)
3) off()
(1) 등록된 이벤트를 제거한다.
(2) 형식
이벤트대상.off('이벤트타입')
4) trigger()
(1) 이벤트를 강제로 발생시킨다.
(2) 형식
이벤트대상.trigger('이벤트타입')
5) 이벤트타입이 곧 이벤트 메소드
(1) 클릭이벤트 : 이벤트대상.click(이벤트리스너)
(2) 변경이벤트 : 이벤트대상.change(이벤트리스너)
(3) 키이벤트 : 이벤트대상.keyup(이벤트리스너)
<button id="btn">버튼</button>
<script>
$('#btn').on('click', function(){
alert(this.textContent + ' 클릭했다.'); // JavaScript : JavaScript 객체 this의 textContent 속성
alert($(this).text() + ' 클릭했다.'); // jQuery : jQuery 객체로 바꾼 this의 text() 메소드
})
</script>
<button class="btn_primary">버튼1</button>
<button class="btn_primary">버튼2</button>
<button class="btn_primary">버튼3</button>
<script>
$('.btn_primary').on('click', function(){
alert($(this).text() + ' 클릭했다.');
})
var btn_primary = document.getElementsByClassName('btn_primary');
for(let i = 0; i < btn_primary.length; i++){
btn_primary[i].addEventListener('click', function(){
alert(this.textContent + ' 클릭했다.');
})
}
<div class="link">
<a href="https://www.naver.com/">네이버</a>
<a href="https://www.naver.com/">구글</a>
</div>
<script>
$('.link > a').on('click', function(event){
if($(this).text() === '구글'){
alert($(this).text() + ' 클릭했다. 여긴 못 간다.');
event.preventDefault(); // <a> 태그의 기본 이벤트를 막음(링크 이동을 막음)
return; // 아래에 있는 코드는 더 이상 실행하지 않도록 막음(이벤트 리스너 종료시킴)
}
alert($(this).text() + ' 이동합니다.');
})
</script>
<div>
<button id="btn_static">버튼</button>
</div>
<div id="btn_area">
</div>
<script>
$('#btn_static').on('click', function(){
$('#btn_area').html('<button id="btn_dynamic">새버튼</button>');
})
$(document).on('click', '#btn_dynamic', function(){
alert($(this).text() + ' 클릭했다.');
})
</script>
<div>
<button id="btn1">버튼1</button>
<button id="btn2">버튼2</button>
</div>
<script>
// jQuery 객체 생성
var btn1 = $('#btn1');
var btn2 = $('#btn2');
// btn1의 click 이벤트
btn1.click(function(){
alert($(this).text() + ' 클릭했다.');
})
// btn2의 click 이벤트 (btn2를 클릭하면 btn1을 클릭하시오.)
btn2.click(function(){
btn1.trigger('click'); // btn1의 click 이벤트를 강제로 발생시키시오.
})
</script>
[07_event.html]
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../../assets/js/lib/jquery-3.7.1.min.js"></script>
</head>
<body>
<script>
/*
이벤트
1. 이벤트 대상 : 이벤트가 동작하는 HTML 구성 요소
this(JavaScript 객체), 이벤트 객체의 target 속성
2. 이벤트 타입 : 이벤트 종류
3. 이벤트 리스너 : 이벤트가 발생하면 동작하는 함수
4. 이벤트 객체 : 발생한 이벤트의 상세 정보를 가지고 있는 객체
*/
</script>
<script>
/*
jQuery 이벤트
1. 현재 권장하지 않는 이벤트 메소드
1) bind()
2) live()
3) delegate()
2. 현재 사용하는 이벤트 메소드
1) on()
(1) 표준 이벤트 모델이므로(addEventListener) 하나의 이벤트 타입에 여러 개의 이벤트 리스너를 등록할 수 있다.
(2) 형식
① 일반적인 요소
이벤트대상.on('이벤트타입', 이벤트리스너)
② 이벤트로 생성한 동적 요소
부모요소.on('이벤트타입', 이벤트대상, 이벤트리스너)
2) one()
(1) 한 번만 동작하는 이벤트를 작성할 수 있다.
(2) 형식
이벤트대상.one('이벤트타입', 이벤트리스너)
3) off()
(1) 등록된 이벤트를 제거한다.
(2) 형식
이벤트대상.off('이벤트타입')
4) trigger()
(1) 이벤트를 강제로 발생시킨다.
(2) 형식
이벤트대상.trigger('이벤트타입')
5) 이벤트타입이 곧 이벤트 메소드
(1) 클릭이벤트 : 이벤트대상.click(이벤트리스너)
(2) 변경이벤트 : 이벤트대상.change(이벤트리스너)
(3) 키이벤트 : 이벤트대상.keyup(이벤트리스너)
*/
</script>
<!-- 이벤트 등록 -->
<button id="btn">버튼</button>
<script>
$('#btn').on('click', function(){
alert(this.textContent + ' 클릭했다.'); // JavaScript : JavaScript 객체 this의 textContent 속성
alert($(this).text() + ' 클릭했다.'); // jQuery : jQuery 객체로 바꾼 this의 text() 메소드
})
</script>
<hr>
<!-- 이벤트 등록 -->
<button class="btn_primary">버튼1</button>
<button class="btn_primary">버튼2</button>
<button class="btn_primary">버튼3</button>
<script>
/* jQuery 이벤트 처리 : 이벤트 대상이 여러 개라도 for문 처리가 불필요함 */
$('.btn_primary').on('click', function(){
alert($(this).text() + ' 클릭했다.');
})
/*
JavaScript 이벤트 처리
var btn_primary = document.getElementsByClassName('btn_primary');
for(let i = 0; i < btn_primary.length; i++){
btn_primary[i].addEventListener('click', function(){
alert(this.textContent + ' 클릭했다.');
})
}
*/
</script>
<hr>
<!-- 기본 이벤트 취소 : 이벤트 객체가 가지고 있는 preventDefault() 메소드 호출 -->
<div class="link">
<a href="https://www.naver.com/">네이버</a>
<a href="https://www.naver.com/">구글</a>
</div>
<script>
$('.link > a').on('click', function(event){
if($(this).text() === '구글'){
alert($(this).text() + ' 클릭했다. 여긴 못 간다.');
event.preventDefault(); // <a> 태그의 기본 이벤트를 막음(링크 이동을 막음)
return; // 아래에 있는 코드는 더 이상 실행하지 않도록 막음(이벤트 리스너 종료시킴)
}
alert($(this).text() + ' 이동합니다.');
})
</script>
<hr>
<!-- 이벤트로 생성한 요소에 이벤트 등록하기 -->
<div>
<button id="btn_static">버튼</button>
</div>
<div id="btn_area">
</div>
<script>
$('#btn_static').on('click', function(){
$('#btn_area').html('<button id="btn_dynamic">새버튼</button>');
})
$(document).on('click', '#btn_dynamic', function(){
alert($(this).text() + ' 클릭했다.');
})
</script>
<hr>
<!-- 강제 이벤트 발생 -->
<div>
<button id="btn1">버튼1</button>
<button id="btn2">버튼2</button>
</div>
<script>
// jQuery 객체 생성
var btn1 = $('#btn1');
var btn2 = $('#btn2');
// btn1의 click 이벤트
btn1.click(function(){
alert($(this).text() + ' 클릭했다.');
})
// btn2의 click 이벤트 (btn2를 클릭하면 btn1을 클릭하시오.)
btn2.click(function(){
btn1.trigger('click'); // btn1의 click 이벤트를 강제로 발생시키시오.
})
</script>
<hr>
<div class="post" data-post="1">
<h1 class="title">제목1</h1>
<div class="content">내용1</div>
<input type="button" value="삭제" class="btn_remove1">
</div>
<div class="post" data-post="2">
<h1 class="title">제목2</h1>
<div class="content">내용2</div>
<input type="button" value="삭제" class="btn_remove1">
</div>
<script>
var btnRemove1 = $('.btn_remove1');
btnRemove1.click(function(){
alert($(this).closest('.post').data('post'));
})
</script>
<hr>
<div class="post">
<h1 class="title" data-post="1">제목1</h1>
<div class="content">내용1</div>
<input type="button" value="삭제" class="btn_remove2">
</div>
<div class="post">
<h1 class="title" data-post="2">제목2</h1>
<div class="content">내용2</div>
<input type="button" value="삭제" class="btn_remove2">
</div>
<script>
var btnRemove2 = $('.btn_remove2');
btnRemove2.click(function(){
alert($(this).prevAll('.title').data('post'));
})
</script>
<hr>
<div class="post">
<h1 class="title">제목1</h1>
<div class="content" data-post="1">내용1</div>
<input type="button" value="삭제" class="btn_remove3">
</div>
<div class="post">
<h1 class="title">제목2</h1>
<div class="content" data-post="2">내용2</div>
<input type="button" value="삭제" class="btn_remove3">
</div>
<script>
var btnRemove3 = $('.btn_remove3');
btnRemove3.click(function(){
alert($(this).prev('.content').data('post'));
})
</script>
<hr>
<div class="post">
<h1 class="title">제목1</h1>
<div class="content">내용1</div>
<input type="button" value="삭제" class="btn_remove4" data-post="1">
</div>
<div class="post">
<h1 class="title">제목2</h1>
<div class="content">내용2</div>
<input type="button" value="삭제" class="btn_remove4" data-post="2">
</div>
<script>
var btnRemove4 = $('.btn_remove4');
btnRemove4.click(function(){
alert($(this).data('post'));
})
</script>
<hr>
<div class="post">
<h1 class="title">제목1</h1>
<div class="content">내용1</div>
<input type="button" value="삭제" class="btn_remove5">
<input type="hidden" value="1">
</div>
<div class="post">
<h1 class="title">제목2</h1>
<div class="content">내용2</div>
<input type="button" value="삭제" class="btn_remove5">
<input type="hidden" value="2">
</div>
<script>
var btnRemove5 = $('.btn_remove5');
btnRemove5.click(function(){
alert($(this).next().val());
})
</script>
</body>
</html>
