본문 바로가기
✨ Front-end/jQuery

[jQuery] 가장 기초적인 $( function() { .... } 에 대해

by 환풍 2023. 9. 4.
728x90
반응형

 

$( function() {... } 란?

자바스크립트의 $(document).ready(function() { ... }); 을 축약한 jQuery이다.

 

1
2
3
4
5
6
7
$(document).ready(function() {
    // 웹 페이지가 로드된 후 실행할 코드 작성
});
--------------------------------------------
$(function() {
    // 웹 페이지가 로드된 후 실행할 코드 작성
});
cs

두 코드 모두 웹 페이지의 DOM 요소가 완전히 로드 되었을 때 실행된다는 것이다.

즉, 웹 페이지의 HTML 구조가 완전히 로드되고 초기화되서 사용자에게 표시되기전까지 기다린다.

 

 

1
2
3
4
5
6
7
$(document).ready(function() {
    // 웹 페이지가 로드된 후 실행할 코드 작성
    // DOM 요소에 접근하거나 이벤트 핸들러를 등록하는 등의 작업 수행
    alert(1);
});
 
alert(2);
cs

그렇다면 이 두개는 무슨 차이가 있을까? 

코드를 적용해보면 페이지로 들어왔을 때 2가 먼저 출력이 되고 이후 1이 출력이된다.

 

alert(2) 이 코드는 스크립트가 로드되면 즉시 실행되기 때문이다.

웹 페이지 로딩과는 관련이없으며, 스크립트가 로드되는 즉시 실행된다.

주로 초기화와 관계없는 간단한 작업이나 테스트 목적으로 사용한다.

 

따라서, alert(2) 는 페이지가 로드되지 않은 상태에서 실행되고 즉시 경고창을 띄우게 된다.

반면에 $(document).ready(function() { ... });는 페이지가 로드된 후에 실행되므로

페이지의 HTML 구조나 DOM 요소에 접근하는 작업을 수행하기에 적합하다.

 


각각 표현 법이 다른 이벤트 리스너 (버튼)

 

See the Pen Untitled by ParkJooHong (@ParkJooHong) on CodePen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
  <script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script>
function process(){
    alert("버튼1");    
}
$(document).ready(function(){
    //객체.이벤트(함수(){});
    $("#btn2").click(function(){
        alert("버튼2");
    });
    
    //객체.on(이벤트,함수(){});  또는  객체.bind(이벤트,함수(){}); 
    $("#btn3").on('click',function(){
        alert("버튼3");
        $(this).off();
    });
});
</script>
</head>
<body>
<input type="button" id="btn1" value="버튼1" onclick="process()">
<input type="button" id="btn2" value="버튼2">
<input type="button" id="btn3" value="버튼3">
</body>
</html>
 
cs

세 개 모두 다른 동작을 하는 버튼이 있다.

버튼1

prcoess( ) 함수를 사용해 HTML의 버튼1이 클릭될 때 호출된다. 

 

버튼2 와 버튼3은 버튼1과 다른 형태이다.

$(document).ready(function(){ ... }); jQuery를 사용해서 문서가 로드될 때 실행할 코드를 정의한다.

버튼2

$("#btn2").click(function(){ ... }); "버튼2"에 대한 클릭 이벤트 핸들러를 등록한다. 버튼2를 클릭하면 경고창이 표시된다.

버튼3

$("#btn3").on('click', function(){ ... });: "버튼3"에 대한 클릭 이벤트 핸들러를 등록한다.

버튼3을 클릭하면 경고창이 표시되며, $(this).off();를 호출하여 이벤트 핸들러를 삭제한다.

즉, 버튼3을 한 번 클릭한 후에는 더 이상 클릭 이벤트가 동작하지 않는다.

 

그렇다면 버튼2와 버튼3에는 어떤 차이가 있을까?

 

$("#btn2").click(function(){ ... });

이 코드는 "버튼2" 요소에 대한 클릭 이벤트 핸들러를 직접 등록하는 방법이다.

클릭 이벤트가 발생할 때마다 해당 핸들러가 실행된다.

이 방법은 한 번만 이벤트 핸들러를 등록하는 간단한 방법이며, 한 요소에 여러 이벤트 핸들러를 등록할 수 있다.

$("#btn3").on('click', function(){ ... });

이 코드는 "버튼3" 요소에 대한 클릭 이벤트 핸들러를 .on() 메서드를 사용하여 등록하는 방법이다.

.on() 메서드를 사용하면 이벤트 핸들러를 등록한 후에 나중에 .off() 메서드를 사용하여 이벤트 핸들러를 삭제할 수 있다. 이 코드에서는 클릭 이벤트 핸들러 내에서 $(this).off();를 호출해 한 번 클릭 후에는 더 이상 클릭 이벤트가 동작안한다.


차이점

click() 메서드를 사용하는 경우에는 이벤트 핸들러를 등록하면 나중에 삭제할 수 없다. 핸들러가 등록되면 계속 작동한다.
.on('click', ...) 메서드를 사용하는 경우에는 이벤트 핸들러를 나중에 삭제할 수 있다. 이를 통해 특정 상황에서만 이벤트 핸들러를 활성화하고, 필요 없어지면 비활성화시킬 수 있다.


따라서 "버튼2"의 경우 클릭 이벤트 핸들러는 항상 활성화되지만,

"버튼3"의 경우 클릭 이벤트 핸들러를 한 번 실행한 후에는 비활성화된다.

728x90
반응형

댓글