$(document).on과 $(document).ready

Eddy·2023년 5월 16일
0

jQuery

목록 보기
7/7

$(document).on(eventName, selector, eventHandler);

바인딩 시 문서에 존재하는 요소와 나중에 동적으로 추가되는 요소에 이벤트 핸들러를 연결할 수 있습니다. 이는 초기 이벤트 바인딩이 발생할 때 존재하지 않을 수 있는 요소에 대한 이벤트를 처리할 수 있으므로 동적으로 생성되거나 로드된 콘텐츠로 작업할 때 특히 유용합니다.

$(document).on(eventName, selector, eventHandler);

클릭 이벤트는 $(document)에 위임되며, 이벤트 바인딩이 처음 설정되었을 때 요소가 존재했는지 여부에 관계없이 셀렉터와 일치하는 요소에서 클릭이 발생할 때마다 이벤트 핸들러가 트리거됩니다.

.on() 이벤트 핸들러를 $(document) 자체에 첨부할 경우 적절하게 사용하지 않으면 성능에 영향을 미칠 수 있으므로 주의해서 사용해야 합니다. 일반적으로 이벤트 핸들러는 무분별하게 사용하는 것보다 바인딩 시점에 사용 가능한 가장 가까운 상위 요소에 연결하는 것이 좋습니다.


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

DOM(Document Object Model)이 완전히 로드되고 JavaScript로 조작할 준비가 되었을 때 코드를 실행하는 데 사용되는 jQuery 메서드입니다. 해당 요소에 의존하는 JavaScript 코드를 실행하기 전에 웹 페이지의 모든 필수 요소가 존재하는지 확인하기 위해 일반적으로 사용되는 기술입니다.

함수가 $(document) 인수로 전달됩니다. .ready()는 DOM이 완전히 로드되고 준비되면 실행되는 콜백 함수입니다.그러면 이 함수 내부의 코드가 페이지의 HTML 요소와 안전하게 상호 작용할 수 있습니다.

$(document).ready(function() {
  $("button").click(function() {
    //
  });
});

즉 .ready() 함수는 클릭 이벤트 핸들러를 부착하기 전에 버튼이 완전히 로드되고 JavaScript에 의해 조작될 준비가 되었는지 확인합니다.

$(document).ready()가 항상 필요한 것은 아닙니다. 특히 JavaScript 코드가 HTML 문서의 끝에 있는 경우에는 닫는 태그 바로 앞에 있습니다. 이 경우 JavaScript 코드가 실행될 때까지 DOM이 이미 완전히 로드됩니다.

$(documet).ready() 대신 $()를 사용합시다.

$(function(){
// 실행할 기능을 정의해주세요.
});

jQuery 3.0 버전 이후부터는 첫 번째에 해당하는 구문만 사용하는 것을 권장드립니다. .ready() Event는 1.8 버전에서는 deprecated 되었으며 3.0에서는 지원하지 않기 때문입니다.


요약

$(document).on()

주로 이벤트 위임에 사용됩니다. 이를 통해 초기 이벤트 바인딩 후 문서에 추가된 요소를 포함하여 이벤트 핸들러를 요소에 동적으로 연결할 수 있습니다.

요소에 이벤트 처리기를 연결하고 이벤트 유형, 특정 요소를 대상으로 하는 셀렉터 및 이벤트 기능을 지정하는 데 사용됩니다. 동적으로 추가된 요소가 있거나 상위 요소에 이벤트를 위임하려는 경우에 자주 사용됩니다.

$(document).ready()

DOM이 완전히 로드되고 JavaScript로 조작할 준비가 되었을 때 코드를 실행하는 데 사용됩니다.

콜백 함수를 전달하면 DOM이 준비되면 해당 함수가 실행됩니다. 일반적으로 이벤트 핸들러를 바인딩하거나, DOM 요소를 조작하거나, 특정 요소가 있어야 하는 기타 작업을 수행하는 데 사용됩니다.


.click(function() { ... }) VS .on("click", function() { ... });

위의 내용을 살펴봤다면 둘의 차이도 이해 할 수 있습니다.

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

  • 이 코드는 클릭 이벤트 핸들러를 ID가 "myButton"인 버튼 요소에 직접 연결합니다.
  • 셀렉터$("#myButton")를 사용하여 버튼을 선택하고 이벤트 핸들러 기능을 click이벤트에 바인딩합니다.
  • ID가 "myButton"인 버튼을 클릭하면 이벤트 핸들러가 실행됩니다.
  • 이 접근 방식은 코드가 실행될 때 버튼 요소가 이미 DOM에 존재한다고 가정합니다.

$(document).on("click", "#myButton", function() { ... });

  • 이벤트 위임을 사용하여 클릭 이벤트를 버튼 요소에 직접 연결하지 않고 document 개체에 연결합니다.
  • 이벤트 핸들러는 셀렉터 #myButton과 일치하는 요소에서 클릭 이벤트가 발생할 때 트리거되도록 지정됩니다.
  • 셀렉터는 필터 역할을 하므로 클릭 이벤트의 대상이 셀렉터와 일치하는 경우에만 이벤트 핸들러가 실행됩니다.
  • 이 접근 방식은 코드 실행 시 존재하지 않을 수 있는 ID "myButton" 버튼을 포함하여 문서에 동적으로 추가되는 요소에 대해서도 이벤트 처리를 허용합니다.

웹 브라우저의 HTML문서 렌더링 과정

  • 불러오기(Loading)
    불러오기는 HTTP 모듈 또는 파일시스템으로 전달 받은리소스 스트림(Resource Stream)을 읽는 과정으로 로더(Loader)가 이 역할을 맡고 있다.
    로더는 단순히 읽는 것이 아니라, 이미 데이터를 읽었는지도 확인하고,팝업창을 열지 말지, 또는 파일을 다운로드 받을 지를 결정한다.

  • 파싱(Parsing)
    파싱은 DOM(Document Object Model) 트리를 만드는 과정이다.
    웹 엔진이 가지고 있는 HTML/XML 파서가 문서를 파싱해서 DOM Tree를 만든다.
    DOM Tree : 내용을 저장하는 트리로 javascript에서 접근하는 DOM객체를 쓸 때 이용됨.

  • 렌더링 트리 만들기(Rendering Tree)
    렌더링 트리 : DOM Tree와는 별도로 그리기 위한 트리가 만들어져야 하는데, 그것이 렌더링 트리다.
    (그릴 때 필요없는 head, title, body 태그등이 없음 + display:none; 처럼 DOM에는 있지만 화면에서는 걸러내야할 것들이 걸러내진 트리)

  • CSS 결정
    CSS는 선택자에 따라서 적용되는 태그가 다르기 때문에
    모든 CSS 스타일을 분석해 태그에 스타일 규칙이 적용되게 결정한다.

  • 레이아웃(Layout)
    렌더링 트리에서 위치나 크기를 가지고 있지 않기 때문에
    객체들에게 위치와 크기를 정해주는 과정을 레이아웃이라고 한다.

  • 그리기(Painting)
    렌더링 트리를 탐색하면서 페이지를 그려나간다.

0개의 댓글