jQuery 이벤트 관련 메소드
.on(), .one(), .off(), .trigger()
- id가 btn-n인 버튼이 여러 개 있다고 가정하고 메소드를 사용해보자
// 1. 버튼을 클릭할 때마다 실행되는 이벤트핸들러 함수
$('#btn-1').on('click', function() {
alert('1번 버튼 클릭');
});
$('#btn-2').onclick(function() {
alert('2번 버튼 클릭');
});
// 2. 버튼을 처음 한 번 클릭할 때만 실행되는 이벤트핸들러 함수
$('#btn-3').one('click', function() {
alert('3번 버튼 클릭');
});
$('#btn-4').one('click', function() {
alert('4번 버튼 클릭');
});
// 3. 버튼에 등록된 이벤트 핸들러 함수 삭제하기
$("#btn-5").click(function() { // btn-5를 클릭하면 btn-1에서 클릭이벤트 발생 시 실행될 이벤트핸들러를 삭제한다
$('#btn-1').off('click');
});
$("#btn-6").click(function() { // btn-6을 클릭하면 btn-2에서 클릭이벤트 발생 시 실행될 이벤트핸들러를 삭제한다
$('#btn-2').off('click');
});
// 4. 페이지가 열리자마자 onclick 이벤트를 강제로 발생시키기
$('#btn-7').trigger('click');
$(this) 예제 1
- this에는 이벤트가 발생한 엘리먼트 객체가 전달된다.
- $(this)는 이벤트가 발생한 엘리먼트를 포함하는 jQuery 결과 집합 객체이다.
// 이 코드를 입력하면 위와 같은 버튼 세 개가 나타난다.
<div class="row mb-3">
<div class="col">
<button class="btn btn-primary">버튼1</button>
<button class="btn btn-primary">버튼2</button>
<button class="btn btn-primary">버튼3</button>
</div>
</div>
// 버튼 클릭 시 클릭한 버튼이 disabled 상태로 바뀌는 함수다.
<script>
$('.btn').click(function () {
$(this).prop('disabled', true);
});
</script>
$(this) 예제 2
- 홍길동
- 김유신
- 강감찬
- 이순신
- 유관순
// 이 코드를 입력하면 위와 같은 리스트가 나타난다.
<div class="row mb-3">
<ul class="list-group">
<li class="list-group-item">홍길동 <button class="btn btn-danger btn-sm float-end">삭제</button></li>
<li class="list-group-item">김유신 <button class="btn btn-danger btn-sm float-end">삭제</button></li>
<li class="list-group-item">강감찬 <button class="btn btn-danger btn-sm float-end">삭제</button></li>
<li class="list-group-item">이순신 <button class="btn btn-danger btn-sm float-end">삭제</button></li>
<li class="list-group-item">유관순 <button class="btn btn-danger btn-sm float-end">삭제</button></li>
</ul>
</div>
<script>
$('.btn-danger').click(function() {
$(this).parent().remove(); // 이 버튼의 부모 태그(li)를 찾아서 삭제함
});
</script>
이벤트 핸들러 함수의 반환값
- form 태그에서 onsubmit 이벤트가 발생하면 폼 입력값이 서버로 제출된다.
- jQuery에서는 <form> 태그에서 onsubmit 이벤트 발생 시 실행되는 함수가 false값을 반환하면 서버로 제출되지 않는다.
- return false는 event.preventDefault()와 같다.
<div class="row mb-3">
<div class="col">
<form id="form-login" action="" method="post">
<div class="mb-3">
<label class="form-label">아이디</label>
<input type="text" class="form-control" name="id">
</div>
<div class="mb-3">
<label class="form-label">비밀번호</label>
<input type="password" class="form-control" name="pwd">
</div>
<div class="mb-3">
<button type="submit" class="btn btn-primary">로그인</button>
</div>
</form>
</div>
</div>
<script>
$("#form-login").submit(function() {
var userId = $("input[name=id]").val();
if (userId == "") {
alert("아이디는 필수입력값입니다.");
return false;
}
var userPwd = $("input[name=pwd]").val();
if (userPwd == "") {
alert("비밀번호는 필수입력값입니다.");
return false;
}
return true;
});
</script>