복붙노트

[JQUERY] jQuery를 모바일 : 문서 준비 대 페이지 이벤트

JQUERY

jQuery를 모바일 : 문서 준비 대 페이지 이벤트

해결법


  1. 1.내 원래 문서는 페이지 처리, jQuery를 모바일 1.4 전에 기본적으로 모든 오래된 방법을 구성했다. 당신은 여전히 ​​모든 것이 적어도 내년 jQuery를 모바일 1.6까지, 아래에 언급 사용할 수 있도록, jQuery를 모바일 1.5를 취급의 오래된 방법은 현재 사용되지 않으며 (포함)까지 활성 유지됩니다.

    내 원래 문서는 페이지 처리, jQuery를 모바일 1.4 전에 기본적으로 모든 오래된 방법을 구성했다. 당신은 여전히 ​​모든 것이 적어도 내년 jQuery를 모바일 1.6까지, 아래에 언급 사용할 수 있도록, jQuery를 모바일 1.5를 취급의 오래된 방법은 현재 사용되지 않으며 (포함)까지 활성 유지됩니다.

    더 이상 존재하지 않는 pageinit 포함 된 이벤트는, 그들은 pagecontainer 위젯으로 대체됩니다. Pageinit이 완전히 삭제되고 대신 pagecreate을 사용할 수 있으며, 해당 이벤트는 동일하고 변경하지 않을 머물렀다.

    이 페이지의 이벤트 처리의 새로운 방법에 관심이 있다면, 여기 좀 봐 다른 경우에이 문서를 계속 주시기 바랍니다. 당신은 당신이 아마 많은 유용한 정보를 찾을 수 있도록 페이지 이벤트를 넘어, 당신이 jQuery를 모바일 1.4 +를 사용하는 경우에도이 대답을 읽어야합니다.

    이 문서는 또한 여기에 내 블로그의 일환으로 볼 수 있습니다.

    당신이 jQuery를 배울 첫 번째 것은 모든 것이 즉시 DOM이로드 될 때 실행됩니다 있도록 () 함수 .ready $ (문서)의 내부 코드를 호출하는 것입니다. 하지만, jQuery를 모바일에서, Ajax는 당신이 탐색으로 DOM에 각 페이지의 내용을로드하는 데 사용됩니다. 첫 페이지가로드 된 모든 코드는 페이지 새로 고침 후 실행됩니다 페이지 조작을위한 전에이 때문에 $ (문서)의 .ready () 트리거합니다. 이것은 매우 미묘한 버그가 있습니다. 일부 시스템에서는 잘 작동 것으로 나타날 수 있지만 다른 사람이 발생하는 불확실성을 반복하기 어려운, 불규칙의 원인이 될 수 있습니다.

    클래식의 jQuery 구문 :

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

    이 문제를 해결 (나이 문제가 신뢰) 페이지 이벤트를 생성 jQuery를 모바일 개발자를합니다. 간단히 말해서 페이지에서 이벤트 페이지 실행의 특정 지점에서 트리거 이벤트입니다. 그 페이지 이벤트 중 하나는 pageinit 이벤트이며, 우리는 다음과 같이 사용할 수 있습니다 :

    $(document).on('pageinit', function() {
    
    });
    

    우리는 심지어 더 나아가 문서 선택기 대신 페이지 ID를 사용할 수 있습니다. 이제 우리는 ID 인덱스 jQuery를 모바일 페이지가 있다고 가정 해 봅시다 :

    <div data-role="page" id="index">
        <div data-theme="a" data-role="header">
            <h3>
                First Page
            </h3>
            <a href="#second" class="ui-btn-right">Next</a>
        </div>
    
        <div data-role="content">
            <a href="#" data-role="button" id="test-button">Test button</a>
        </div>
    
        <div data-theme="a" data-role="footer" data-position="fixed">
    
        </div>
    </div>
    

    인덱스 페이지 만 사용할 수 있습니다 우리는이 구문을 사용할 수있는 것입니다 코드를 실행하려면 :

    $('#index').on('pageinit', function() {
    
    });
    

    Pageinit 이벤트 때마다 페이지에 대한로드 처음으로 표시 할 수있다 실행됩니다. 페이지를 수동으로 새로 고쳐집니다 또는 아약스 페이지 로딩이 해제되지 않는 한 그것은 다시 트리거되지 않습니다. 혹시 코드가 당신이 pagebeforeshow 이벤트를 사용하는 것이 좋습니다 페이지를 방문 할 때마다 실행합니다.

    다음은 작업 예입니다 http://jsfiddle.net/Gajotres/Q3Usv/이 문제를 보여줍니다.

    이 질문에 몇 가지 더 노트. 아무리 당신이 1 HTML 여러 페이지를 사용하거나 여러 HTML 파일이 하나의 별도의 자바 스크립트 파일로 처리하는 사용자 정의 자바 스크립트 페이지의 모든를 분리하는 것이 좋습니다 패러다임합니다. 이것은 더 좋은 코드를 확인하십시오 것입니다하지만, jQuery를 모바일 응용 프로그램을 만드는 특히 동안 당신은 훨씬 더 코드 개요를해야합니다.

    이 또 다른 특별한 jQuery를 모바일 이벤트도 그리고 그것은 mobileinit이라고합니다. jQuery를 모바일가 시작되면 문서 객체에 mobileinit 이벤트를 트리거합니다. 그들 mobileinit에 기본 설정을 재정의, 바인드합니다. mobileinit 사용의 좋은 예 중 하나는 아약스 페이지 로딩 소등, 또는 기본 아약스 로더의 행동을 변화하고 있습니다.

    $(document).on("mobileinit", function(){
      //apply overrides here
    });
    

    우선 이벤트는 여기에서 찾을 수 있습니다 : http://api.jquerymobile.com/category/events/

    우리는 페이지 A와 페이지 B가 있다고 가정하자, 이것은 언로드 /로드 순서는 다음과 같습니다

    더 나은 페이지 이벤트의 경우이 읽기 이해 :

    페이지 로딩 jsFiddle 예 : http://jsfiddle.net/Gajotres/QGnft/

    어떤 이유에서 페이지 전환이이 코드와 함께 할 수있는 몇 가지 조건에 방지 할 필요를위한 경우 :

    $(document).on('pagebeforechange', function(e, data){
        var to = data.toPage,
            from = data.options.fromPage;
    
        if (typeof to  === 'string') {
            var u = $.mobile.path.parseUrl(to);
            to = u.hash || '#' + u.pathname.substring(1);
            if (from) from = '#' + from.attr('id');
    
            if (from === '#index' && to === '#second') {
                alert('Can not transition from #index to #second!');
                e.preventDefault();
                e.stopPropagation();
    
                // remove active status on a button, if transition was triggered with a button
                $.mobile.activePage.find('.ui-btn-active').removeClass('ui-btn-active ui-focus ui-btn');;
            }
        }
    });
    

    이 모든 페이지 전환의 구걸에 트리거 및 페이지 전환이 발생하기 전에 가장 중요한 것은이 페이지의 변화를 방지 할 수 있기 때문에이 예제는 어떤 경우에 작동합니다.

    여기에 동작하는 예제입니다 :

    jQuery를 모바일 고전적인 웹 애플리케이션과는 다른 방식으로 작동합니다. 당신이 당신의 이벤트 당신이 그것을 반복 이벤트를 바인딩 일부 페이지를 방문 할 때마다 바인딩 관리 방법에 따라. 이것은 jQuery를 모바일의 페이지를 처리하는 단지 방법입니다, 오류가 아닙니다. 예를 들어, 다음 코드를 살펴 :

    $(document).on('pagebeforeshow','#index' ,function(e,data){
        $(document).on('click', '#test-button',function(e) {
            alert('Button click');
        });
    });
    

    작업 jsFiddle 예 : http://jsfiddle.net/Gajotres/CCfL4/

    때마다 페이지 #INDEX 클릭 이벤트가 버튼을 # 테스트 버튼을 준수 할 것입니다 것입니다 방문하십시오. 페이지로 페이지 1에서 2 다시 여러 번 이동하여 테스트합니다. 이 문제를 방지하기위한 몇 가지 방법이 있습니다 :

    가장 좋은 방법은 바인드 이벤트에 pageinit을 사용하는 것입니다. 당신이 공식 문서에서 살펴 경우에 당신은 너무 이벤트가 다시 결합 될 방법은 없다, pageinit 그냥 문서 준비처럼 한 번만 트리거 것을 발견 할 것이다. 이것은 당신이 방법 떨어져와 이벤트를 제거 할 때와 같은 처리 오버 헤드를 가지고 있지 않기 때문에 가장 좋은 솔루션입니다.

    작업 jsFiddle 예 : http://jsfiddle.net/Gajotres/AAFH8/

    이 작업 솔루션은 이전의 문제가 예를의 기준으로한다.

    당신이 그것을 결합하기 전에 이벤트를 제거합니다 :

    $(document).on('pagebeforeshow', '#index', function(){
        $(document).off('click', '#test-button').on('click', '#test-button',function(e) {
            alert('Button click');
        });
    });
    

    작업 jsFiddle 예 : http://jsfiddle.net/Gajotres/K8YmG/

    이 같은 jQuery를 필터 선택기를 사용합니다 :

    $('#carousel div:Event(!click)').each(function(){
        //If click is not bind to #carousel div do something
    });
    

    이벤트 필터가 공식 jQuery를 프레임 워크의 일부가 아니기 때문에 그것은 여기에서 찾을 수 있습니다 : http://www.codenothing.com/archives/2009/event-filter/

    속도가 주요 관심사 인 경우 간단히 말해서, 다음 솔루션이 훨씬 더 나은 해결 방법 1보다.

    새로운 하나, 그들 모두의 가장 쉬운 아마.

    $(document).on('pagebeforeshow', '#index', function(){
        $(document).on('click', '#test-button',function(e) {
            if(e.handled !== true) // This will prevent event triggering more than once
            {
                alert('Clicked');
                e.handled = true;
            }
        });
    });
    

    작업 jsFiddle 예 : http://jsfiddle.net/Gajotres/Yerv9/

    이 솔루션에 대한 sholsinger에 TNX : http://sholsinger.com/archive/2011/08/prevent-jquery-live-handlers-from-firing-multiple-times/

    pageChange 이벤트 단점 - 두 번 트리거

    때때로 pagechange 이벤트를 두 번 트리거 할 수 있으며 문제가 전에 언급과는 아무 상관이 없습니다.

    toPage가 jQuery를 향상 DOM 오브젝트 없을 때 pagebeforechange 이벤트가 두 번 발생하는 이유는 changePage의 재귀 호출 때문이다. 개발자가 이벤트 내에서 toPage을 변경할 수대로이 재귀는 위험하다. 현상 일관 pagebeforechange 이벤트 핸들러 내의 문자열 toPage을 설정하는 경우에 관계없이 개체인지 여부를 무한 순환 루프가 발생할 것이다. pageload 이벤트는 데이터 객체의 페이지 속성으로 새 페이지 (이 문서에 추가해야합니다, 그것은 현재 목록에없는)를 전달합니다. pageload 이벤트 따라서로드 페이지에 액세스하는 데 사용할 수 있습니다.

    당신이 pageChange을 통해 추가 매개 변수를 전송하기 때문에 몇 즉이 일어나고있다.

    예:

    <a data-role="button" data-icon="arrow-r" data-iconpos="right" href="#care-plan-view?id=9e273f31-2672-47fd-9baa-6c35f093a800&amp;name=Sat"><h3>Sat</h3></a>
    

    해결하려면이 문제는 페이지 이벤트 전이 순서로 나열된 페이지 이벤트를 사용합니다.

    언급 한 바와 같이, 때 당신은 이미이 DOM에 존재하는, 또는 수동으로 $ .mobile.changePage를 호출하여, 여러 이벤트 및 후속 행동이 발생하는 또 다른 jQuery를 모바일 페이지로의 링크를 클릭을 통해 일반적으로 중, 하나의 jQuery를 모바일 페이지에서 다른 페이지로 변경합니다. 높은 수준에서 다음과 같은 작업이 수행

    이것은 평균 페이지 전환 벤치 마크입니다 :

    페이지로드 및 처리 : 3 MS

    페이지 향상 : 45 밀리

    전환 : 604 밀리 초

    총 시간 : 670 밀리 초

    *이 값은 밀리 초 단위입니다.

    당신이 볼 수 있도록 전환 이벤트는 실행 시간의 거의 90 %를 먹고있다.

    이 페이지 전환하는 동안 한 페이지에서 다른 페이지로 매개 변수 / S를 보낼 수 있습니다. 그것은 몇 가지 방법으로 수행 할 수 있습니다.

    참조 : https://stackoverflow.com/a/13932240/1848600

    해결 방법 1 :

    당신은 changePage로 값을 전달할 수 있습니다 :

    $.mobile.changePage('page2.html', { dataUrl : "page2.html?paremeter=123", data : { 'paremeter' : '123' }, reloadPage : true, changeHash : true });
    

    그리고 다음과 같이 읽을 :

    $(document).on('pagebeforeshow', "#index", function (event, data) {
        var parameters = $(this).data("url").split("?")[1];;
        parameter = parameters.replace("parameter=","");
        alert(parameter);
    });
    

    index.html을

    <메타 캐릭터 = "UTF-8"/> <메타 이름 = "뷰포트"내용 = "= widdiv 장치 widdiv 초기 스케일 = 1.0, 최대 스케일 = 1.0, 사용자 확장 = 없음"/>하지 <메타 이름 = "사과 모바일 웹 응용 프로그램 가능한"내용 = "예"/> <메타 이름 = "블랙"내용을 "사과 모바일 웹 앱 상태가-스타일의 바"= /> </ TITLE> <링크 REL = "스타일"HREF = "http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css"/> <스크립트 SRC = "http://www.dragan-gaic.info/js/jquery-1.8.2.min.js"> </ script> <스크립트 SRC = "http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"> </ script> <script> $ (문서) CSTE 연구진 ( 'pagebeforeshow', '#INDEX "함수 () { $ (문서) CSTE 연구진 ({) (,, "#changePage"를 '클릭'기능 $ .mobile.changePage ( 'second.html', {dataUrl : "second.html paremeter = 123?"데이터 : { 'paremeter': '123'}, reloadPage : 거짓, changeHash : TRUE}); }); }); $ (문서) CSTE 연구진 ( 'pagebeforeshow', '#second "함수 () { VAR 매개 변수 = $ (이) .DATA ( "URL"). 분할 ( "?") [1]; 파라미터 = parameters.replace ( "파라미터 =" ""); 경고 (매개 변수); }); </ script> </ head> <body> <! - 가정 -> <DIV 데이터-역할 = "페이지"ID = "인덱스"> <div 데이터-역할 = "헤더"> <H3> 첫 페이지 </ H3> </ DIV> <div 데이터-역할 = "콘텐츠"> <a data-role="button" id="changePage"> 테스트 </a>에 </ DIV> <! - 내용 -> </ DIV> <! - 페이지 -> </ body> </ HTML></p> <p>second.html</p> <p><! DOCTYPE HTML> <HTML> <head> <메타 캐릭터 = "UTF-8"/> <메타 이름 = "뷰포트"내용 = "= widdiv 장치 widdiv 초기 스케일 = 1.0, 최대 스케일 = 1.0, 사용자 확장 = 없음"/>하지 <메타 이름 = "사과 모바일 웹 응용 프로그램 가능한"내용 = "예"/> <메타 이름 = "블랙"내용을 "사과 모바일 웹 앱 상태가-스타일의 바"= /> <TITLE> </ TITLE> <링크 REL = "스타일"HREF = "http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css"/> <스크립트 SRC = "http://www.dragan-gaic.info/js/jquery-1.8.2.min.js"> </ script> <스크립트 SRC = "http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"> </ script> </ head> <body> <! - 가정 -> <div 데이터-역할 = "페이지"ID = "초"> <div 데이터-역할 = "헤더"> <H3> 두 번째 페이지 </ H3> </ DIV> <div 데이터-역할 = "콘텐츠"> </ DIV> <! - 내용 -> </ DIV> <! - 페이지 -> </ body> </ HTML></p> <p>해결 방법 2 :</p> <p>또는 당신은 저장 목적을 위해 지속적인 자바 스크립트 객체를 생성 할 수 있습니다. 긴 아약스는 페이지 로딩에 사용됩니다 (페이지가 어떤 식 으로든 다시로드되지 않음)로 그 객체가 활성화 유지됩니다.</p> <pre><code>var storeObject = { firstname : '', lastname : '' } </code></pre> <p>예 : http://jsfiddle.net/Gajotres/9KKbx/</p> <p>해결 방법 3 :</p> <p>당신이 같은 이전 페이지에서 할 수는 데이터에 액세스 :</p> <pre><code>$(document).on('pagebeforeshow', '#index',function (e, data) { alert(data.prevPage.attr('id')); }); </code></pre> <p>prevPage 개체는 완전한 이전 페이지를 보유하고 있습니다.</p> <p>해결 방법 4 :</p> <p>마지막 해결책으로 우리는 로컬 스토리지의 멋진 HTML 구현이있다. 그것은 단지 (Android 및 iOS 브라우저 포함) HTML5 브라우저에서 작동하지만, 저장된 모든 데이터는 페이지 새로 고침을 통해 지속됩니다.</p> <pre><code>if(typeof(Storage)!=="undefined") { localStorage.firstname="Dragan"; localStorage.lastname="Gaic"; } </code></pre> <p>예 : http://jsfiddle.net/Gajotres/J9NTr/</p> <p>아마 가장 좋은 방법은 있지만, 아이폰 OS 5.x의 일부 버전에서 실패합니다 그것은 잘 알고 오류입니다.</p> <p>나는 얘기를 깜빡 했네요 (그리고 TNX andleer 나를 생각 나게) 이벤트에 / 바인딩 / 바인딩 해제, 라이브 / 다이를 사용을하고 / 바인딩 해제하는 바인드되지 않습니다.</p> <p>이 버전 1.3의 API에 도입되었을 때 jQuery를의 .live () 메소드는 신의 선물로 보였다. 일반적인 jQuery를 응용 프로그램에서이 DOM 조작을 많이 할 수 있으며 요소가 와서 훅을 빼내 매우 지루한되고 갈 수 있습니다. .live () 메소드는 가능한 셀렉터에 기초하여 애플리케이션의 수명 동안 일정하게 후크. 큰 맞죠? 잘못된는 .live () 메소드는 매우 느립니다. .live () 메소드는 실제로 문서 객체에 해당 이벤트를 후킹하는 수단이 문서에 도달 할 때까지 이벤트를 생성하는 소자로부터 이벤트해야 거품입니다. 이 놀라 울 정도로 많은 시간이 소요될 수 있습니다.</p> <p>그것은 지금 사용되지 않습니다. 이 후크와 빼내 이벤트, 코드가 그것보다 .live () 메소드없이 훨씬 더 빨리 될 것 지루할 수 있지만 JQuery와 팀에있는 사람들은 더 이상 I.을 사용을 권장하지 않으며 어느 쪽도 아니.</p> <p>대신 .live의 ()는 CSTE 연구진 사용해야합니다 (). CSTE 연구진은 () 빠른 .live 이상 () 2 ~ 3 배에 관한 것입니다. 이 이벤트 바인딩 벤치 마크를 살펴 보자 http://jsperf.com/jquery-live-vs-delegate-vs-on/34를, 모든 것을 거기에 분명 할 것이다.</p> <p>벤치마킹 jQuery를 모바일 페이지 이벤트를 만든 훌륭한 스크립트가 있습니다. 그것은 여기에서 찾을 수 있습니다 : https://github.com/jquery/jquery-mobile/blob/master/tools/page-change-time.js. 당신이 그것으로 무엇을하기 전에하지만 난 당신이 경고 알림 시스템 및 CONSOLE.LOG 기능으로 변경 (각 "변경 페이지가"응용 프로그램을 중단하여이 데이터를 표시하는 것입니다)를 제거하는 것이 좋습니다.</p> <p>기본적으로 ....이 스크립트는 모든 페이지의 이벤트를 기록하고 신중하게 (페이지 이벤트 설명)이 문서를 읽으면 당신은 페이지 개선, 페이지 전환의 소요 시간이 얼마나 JQM 알</p> <p>항상, 나는 항상 공식 jQuery를 모바일 문서를 읽어 의미. 그것은 일반적으로 필요한 정보를 제공하며, 다른 문서와는 달리이 하나 충분한 설명과 코드 예제, 오히려 좋다.</p> </li> <li> <div><hr /></div><h2>2.여러분 중 일부는이 유용한를 찾을 수 있습니다. 그냥 페이지에 붙여 복사하고이 이벤트가 크롬 콘솔에서 발사되는 시퀀스 (I + Ctrl 키 + 시프트)을 얻을 것이다.</h2> <p>여러분 중 일부는이 유용한를 찾을 수 있습니다. 그냥 페이지에 붙여 복사하고이 이벤트가 크롬 콘솔에서 발사되는 시퀀스 (I + Ctrl 키 + 시프트)을 얻을 것이다.</p> <pre><code>$(document).on('pagebeforecreate',function(){console.log('pagebeforecreate');}); $(document).on('pagecreate',function(){console.log('pagecreate');}); $(document).on('pageinit',function(){console.log('pageinit');}); $(document).on('pagebeforehide',function(){console.log('pagebeforehide');}); $(document).on('pagebeforeshow',function(){console.log('pagebeforeshow');}); $(document).on('pageremove',function(){console.log('pageremove');}); $(document).on('pageshow',function(){console.log('pageshow');}); $(document).on('pagehide',function(){console.log('pagehide');}); $(window).load(function () {console.log("window loaded");}); $(window).unload(function () {console.log("window unloaded");}); $(function () {console.log('document ready');}); </code></pre> <p>이 페이지가 언로드 될 때 해고로 (당신이 페이지에서 멀리 이동할 때) 당신은 콘솔에서 볼 언로드를하지 않을 수 있습니다. 이처럼 사용</p> <pre><code>$(window).unload(function () { debugger; console.log("window unloaded");}); </code></pre> <p>그리고 당신은 내가 무슨 뜻인지 볼 수 있습니다.</p> </li> <li> <div><hr /></div><h2>3.이것은 올바른 방법입니다 :</h2> <p>이것은 올바른 방법입니다 :</p> <p>전용 인덱스 페이지로 사용할 수 있습니다 코드를 실행하기 위해, 우리는이 구문을 사용할 수 있습니다 :</p> <pre><code>$(document).on('pageinit', "#index", function() { ... }); </code></pre> </li> <li> <div><hr /></div><h2>4.jQuery를 모바일에서 문서 준비 및 페이지 이벤트 사이의 간단한 차이는 있습니다 :</h2> <p>jQuery를 모바일에서 문서 준비 및 페이지 이벤트 사이의 간단한 차이는 있습니다 :</p> <p>또한 pageinit 이벤트를 처리하기위한 문서를 사용할 수 있습니다 :</p> <pre><code>$(document).on('pageinit', "#mypage", function() { }); </code></pre> </li> <li> <div><hr /></div><h2>5.당신이) (CSTE 연구진 사용하지만, 당신이 사용하고 있는지 기본적으로 라이브 쿼리입니다.</h2> <p>당신이) (CSTE 연구진 사용하지만, 당신이 사용하고 있는지 기본적으로 라이브 쿼리입니다.</p> <p>반면에, (귀하의 경우와 같은) .ready는 정적 쿼리입니다. 그것을 사용하는 동안, 당신은 동적으로 데이터를 업데이트 할 수 및 부하에 페이지 기다릴 필요가 없습니다. (필요한 경우) 특정 값을 입력 할 때 당신은 단순히 데이터베이스에 값을 전달할 수 있습니다.</p> <p>라이브 쿼리의 사용은 우리가 데이터 (계정이나 글 또는 댓글)를 입력 형태로 일반적입니다.</p> </li> </ul> <p>from <a href='https://stackoverflow.com/questions/14468659/jquery-mobile-document-ready-vs-page-events' target='_blank'>https://stackoverflow.com/questions/14468659/jquery-mobile-document-ready-vs-page-events</a> by cc-by-sa and MIT license</p></div> <!-- System - START --> <!-- System - END --> <!-- Adfit_PC - START --> <!-- Adfit_PC - END --> <!-- GoogleAdsenseForResponsive - START --> <div class="tt_adsense_bottom" style="margin-top:30px;"> <DIV class='ads_adsense_img' style='margin:40px 0px 40px 0px;'> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- 디스플레이광고만 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8393857339019314" data-ad-slot="7474886381" data-ad-format="auto"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </DIV> </div> <!-- GoogleAdsenseForResponsive - END --> <script onerror="changeAdsenseToAdfit()" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9527582522912841" crossorigin="anonymous"></script> <!-- inventory --> <ins class="adsbygoogle" style="margin:50px 0; display:block" data-ad-client="ca-pub-9527582522912841" data-ad-slot="4947159016" data-ad-format="auto" data-full-width-responsive="true" data-ad-type="inventory" data-ad-adfit-unit="DAN-HCZEy0KQLPMGnGuC"></ins> <script id="adsense_script"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <script> if(window.ObserveAdsenseUnfilledState !== undefined){ ObserveAdsenseUnfilledState(); } </script> <div class="container_postbtn #post_button_group"> <div class="postbtn_like"><script>window.ReactionButtonType = 'reaction'; window.ReactionApiUrl = '//cnpnote.tistory.com/reaction'; window.ReactionReqBody = { entryId: 18834 }</script> <div class="wrap_btn" id="reaction-18834" data-tistory-react-app="Reaction"></div><div class="wrap_btn wrap_btn_share"><button type="button" class="btn_post sns_btn btn_share" aria-expanded="false" data-thumbnail-url="https://t1.daumcdn.net/tistory_admin/static/images/openGraph/opengraph.png" data-title="[JQUERY] jQuery를 모바일 : 문서 준비 대 페이지 이벤트" data-description="jQuery를 모바일 : 문서 준비 대 페이지 이벤트 해결법 1.내 원래 문서는 페이지 처리, jQuery를 모바일 1.4 전에 기본적으로 모든 오래된 방법을 구성했다. 당신은 여전히 ​​모든 것이 적어도 내년 jQuery를 모바일 1.6까지, 아래에 언급 사용할 수 있도록, jQuery를 모바일 1.5를 취급의 오래된 방법은 현재 사용되지 않으며 (포함)까지 활성 유지됩니다. 내 원래 문서는 페이지 처리, jQuery를 모바일 1.4 전에 기본적으로 모든 오래된 방법을 구성했다. 당신은 여전히 ​​모든 것이 적어도 내년 jQuery를 모바일 1.6까지, 아래에 언급 사용할 수 있도록, jQuery를 모바일 1.5를 취급의 오래된 방법은 현재 사용되지 않으며 (포함)까지 활성 유지됩니다. 더 이상 존재하.." data-profile-image="https://t1.daumcdn.net/tistory_admin/static/manage/images/r3/default_L.png" data-profile-name="cnpnote" data-pc-url="https://cnpnote.tistory.com/entry/JQUERY-jQuery%EB%A5%BC-%EB%AA%A8%EB%B0%94%EC%9D%BC-%EB%AC%B8%EC%84%9C-%EC%A4%80%EB%B9%84-%EB%8C%80-%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%9D%B4%EB%B2%A4%ED%8A%B8" data-relative-pc-url="/entry/JQUERY-jQuery%EB%A5%BC-%EB%AA%A8%EB%B0%94%EC%9D%BC-%EB%AC%B8%EC%84%9C-%EC%A4%80%EB%B9%84-%EB%8C%80-%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%9D%B4%EB%B2%A4%ED%8A%B8" data-blog-title="복붙노트"><span class="ico_postbtn ico_share">공유하기</span></button> <div class="layer_post" id="tistorySnsLayer"></div> </div><div class="wrap_btn wrap_btn_etc" data-entry-id="18834" data-entry-visibility="public" data-category-visibility="public"><button type="button" class="btn_post btn_etc2" aria-expanded="false"><span class="ico_postbtn ico_etc">게시글 관리</span></button> <div class="layer_post" id="tistoryEtcLayer"></div> </div></div> <button type="button" class="btn_menu_toolbar btn_subscription #subscribe" data-blog-id="2840920" data-url="https://cnpnote.tistory.com/entry/JQUERY-jQuery%EB%A5%BC-%EB%AA%A8%EB%B0%94%EC%9D%BC-%EB%AC%B8%EC%84%9C-%EC%A4%80%EB%B9%84-%EB%8C%80-%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%9D%B4%EB%B2%A4%ED%8A%B8" data-device="web_pc" data-tiara-action-name="구독 버튼_클릭"><em class="txt_state"></em><strong class="txt_tool_id">복붙노트</strong><span class="img_common_tistory ico_check_type1"></span></button> <div data-tistory-react-app="SupportButton"></div> </div> <!-- PostListinCategory - START --> <div class="another_category another_category_color_gray"> <h4>'<a href="/category/JQUERY">JQUERY</a>' 카테고리의 다른 글</h4> <table> <tr> <th><a href="/entry/JQUERY-%EC%98%A4%EB%A5%98-SecurityError%EB%8A%94-%ED%81%AC%EB%A1%9C%EC%8A%A4-%EC%9B%90%EC%A0%90-%ED%94%84%EB%A0%88%EC%9E%84-%EC%95%A1%EC%84%B8%EC%8A%A4-%EC%9B%90%EC%A0%90%EC%9C%BC%EB%A1%9C-%ED%94%84%EB%A0%88%EC%9E%84%EC%9D%84-%EC%B0%A8%EB%8B%A8">[JQUERY] 오류 SecurityError는 : 크로스 원점 프레임 액세스 원점으로 프레임을 차단</a>  <span>(0)</span></th> <td>2020.09.21</td> </tr> <tr> <th><a href="/entry/JQUERY-%ED%95%A9%EB%8B%88%EA%B9%8C-ID%EB%8A%94-%EC%A0%84%EC%B2%B4-%ED%8E%98%EC%9D%B4%EC%A7%80%EC%97%90%EC%84%9C-%EA%B3%A0%EC%9C%A0%ED%95%B4%EC%95%BC">[JQUERY] 합니까 ID는 전체 페이지에서 고유해야?</a>  <span>(0)</span></th> <td>2020.09.21</td> </tr> <tr> <th><a href="/entry/JQUERY-%EB%8F%99%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%83%9D%EC%84%B1-%EB%90%9C-%EC%9A%94%EC%86%8C%EC%97%90-%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EC%9D%B4%EB%B2%A4%ED%8A%B8%EB%A5%BC-%ED%81%B4%EB%A6%AD-%EC%A4%91%EB%B3%B5">[JQUERY] 동적으로 생성 된 요소에 작동하지 않는 이벤트를 클릭 [중복]</a>  <span>(0)</span></th> <td>2020.09.21</td> </tr> <tr> <th><a href="/entry/JQUERY-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EB%98%90%EB%8A%94-%ED%83%AD-%ED%8F%90%EC%87%84-%EA%B0%90%EC%A7%80">[JQUERY] 브라우저 또는 탭 폐쇄 감지</a>  <span>(0)</span></th> <td>2020.09.21</td> </tr> <tr> <th><a href="/entry/JQUERY-%EB%82%98%EB%8A%94-%EA%B0%99%EC%9D%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EC%97%90-jQuery%EB%A5%BC-%EC%97%AC%EB%9F%AC-%EB%B2%84%EC%A0%84%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%A0-%EC%88%98-%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C">[JQUERY] 나는 같은 페이지에 jQuery를 여러 버전을 사용할 수 있습니까?</a>  <span>(0)</span></th> <td>2020.09.21</td> </tr> </table> </div> <!-- PostListinCategory - END --> </div> <div class="entry-footer"> <div class="actionTrail"> <a href="#tb" onclick=""></a>, <a href="#rp" onclick=""></a> </div> <div data-tistory-react-app="Namecard"></div> </div> </div> </div><!-- entry close --> </article> </div><!-- container close --> <aside role="complementary" id="sidebar"> <div class="container"> <div class="sidebar-inner"> <div class="module module_plugin"> <!-- Adfit_PC - START --> <ins class="kakao_ad_area" style="display:none;" data-ad-unit = "DAN-ubre63wuo3sm" data-ad-width = "160" data-ad-height = "600"></ins> <script type="text/javascript" src="//t1.daumcdn.net/kas/static/ba.min.js" async></script> <!-- Adfit_PC - END --> </div> <!-- 검색 모듈 --> <div class="widget widget-search col-md-3 col-xs-12"> <h3><i class="icon-magnifier icons"></i> Search</h3> <input type="text" name="search" value="" onkeypress="if (event.keyCode == 13) { try { window.location.href = '/search' + '/' + looseURIEncode(document.getElementsByName('search')[0].value); document.getElementsByName('search')[0].value = ''; return false; } catch (e) {} }"/> <input value="검색" type="button" onclick="try { window.location.href = '/search' + '/' + looseURIEncode(document.getElementsByName('search')[0].value); document.getElementsByName('search')[0].value = ''; return false; } catch (e) {}" class="btn btn-default btn-sm"/> </div> <!-- 카테고리 모듈 --> <div class="widget widget-category col-md-3 col-xs-12"> <h3><i class="icon-direction icons"></i> 카테고리</h3> <ul class="tt_category"><li class=""><a href="/category" class="link_tit"> 분류 전체보기 </a> <ul class="category_list"><li class=""><a href="/category/PHP" class="link_item"> PHP </a></li> <li class=""><a href="/category/%EC%8A%A4%ED%81%AC%EB%9E%98%EC%B9%98%203.0" class="link_item"> 스크래치 3.0 </a></li> <li class=""><a href="/category/PYTHON" class="link_item"> PYTHON </a></li> <li class=""><a href="/category/SPRING" class="link_item"> SPRING </a></li> <li class=""><a href="/category/HADOOP" class="link_item"> HADOOP </a></li> <li class=""><a href="/category/SCALA" class="link_item"> SCALA </a></li> <li class=""><a href="/category/MONGODB" class="link_item"> MONGODB </a></li> <li class=""><a href="/category/REDIS" class="link_item"> REDIS </a></li> <li class=""><a href="/category/RUBY-ON-RAILS" class="link_item"> RUBY-ON-RAILS </a></li> <li class=""><a href="/category/SQL" class="link_item"> SQL </a></li> <li class=""><a href="/category/NODEJS" class="link_item"> NODEJS </a></li> <li class=""><a href="/category/JQUERY" class="link_item"> JQUERY </a></li> <li class=""><a href="/category/ANDROID" class="link_item"> ANDROID </a></li> <li class=""><a href="/category/SWIFT" class="link_item"> SWIFT </a></li> <li class=""><a href="/category/HTML" class="link_item"> HTML </a></li> <li class=""><a href="/category/CSS" class="link_item"> CSS </a></li> <li class=""><a href="/category/REACTJS" class="link_item"> REACTJS </a></li> <li class=""><a href="/category/VUEJS" class="link_item"> VUEJS </a></li> <li class=""><a href="/category/WORDPRESS" class="link_item"> WORDPRESS </a></li> <li class=""><a href="/category/ANGULAR" class="link_item"> ANGULAR </a></li> <li class=""><a href="/category/MICROSERVICE" class="link_item"> MICROSERVICE </a></li> <li class=""><a href="/category/DJANGO" class="link_item"> DJANGO </a></li> <li class=""><a href="/category/FLASK" class="link_item"> FLASK </a></li> <li class=""><a href="/category/APACHE" class="link_item"> APACHE </a></li> <li class=""><a href="/category/GO" class="link_item"> GO </a></li> <li class=""><a href="/category/JAVA" class="link_item"> JAVA </a></li> <li class=""><a href="/category/FLUTTER" class="link_item"> FLUTTER </a></li> <li class=""><a href="/category/REACTIVE" class="link_item"> REACTIVE </a></li> <li class=""><a href="/category/SPA" class="link_item"> SPA </a></li> </ul> </li> </ul> </div> <!-- 태그목록 모듈 --> <div class="widget widget-tag col-md-3 col-xs-12"> <h3><i class="icon-tag icons"></i> 태그목록</h3> <ul> <li><a href="/tag/mysql" class="cloud4"> mysql</a></li> <li><a href="/tag/spring-mvc" class="cloud4"> spring-mvc</a></li> <li><a href="/tag/java" class="cloud2"> java</a></li> <li><a href="/tag/HADOOP" class="cloud3"> HADOOP</a></li> <li><a href="/tag/jQuery" class="cloud4"> jQuery</a></li> <li><a href="/tag/php" class="cloud4"> php</a></li> <li><a href="/tag/sql" class="cloud2"> sql</a></li> <li><a href="/tag/spring" class="cloud1"> spring</a></li> <li><a href="/tag/javascript" class="cloud4"> javascript</a></li> <li><a href="/tag/PYTHON" class="cloud3"> PYTHON</a></li> </ul> </div> <!-- 최근 포스트 모듈 --> <div class="widget widget-post col-md-3 col-xs-12"> <h3><i class="icon-list icons"></i> 최근에 올라온 글 </h3> <ul> </ul> </div> </div> </div> </div><!-- container close --> </aside><!-- sidebar close --> <footer role="contentinfo"> <div class="container"> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12 footer-menu"> <a href="https://cnpnote.tistory.com/tag"><i class="icon-tag icons"></i> </a> <a href="https://cnpnote.tistory.com/rss" onclick="window.open(this.href); return false"><i class="icon-feed icons"></i> </a> </div> <div class="col-xs-12 col-sm-12 col-md-12 footer-copyright text-right"> <a href="https://cnpnote.tistory.com/"> cnpnote</a>'s Blog is powered by <a href="http://daum.net" onclick="window.open(this.href); return false">Daumkakao</a> / Designed by <a href="http://ongal.tistory.com">CEOSEO</a> </div> </div> </div> </footer> <!-- jQuery --> <script src="https://tistory1.daumcdn.net/tistory/2840920/skin/images/jquery-1.11.0.min.js?_version_=1583344392"></script> <div class="#menubar menu_toolbar "> <h2 class="screen_out">티스토리툴바</h2> <div class="btn_tool"><button class="btn_menu_toolbar btn_subscription #subscribe" data-blog-id="2840920" data-url="https://cnpnote.tistory.com" data-device="web_pc"><strong class="txt_tool_id">복붙노트</strong><em class="txt_state">구독하기</em><span class="img_common_tistory ico_check_type1"></span></button></div></div> <div class="#menubar menu_toolbar "></div> <div class="layer_tooltip"> <div class="inner_layer_tooltip"> <p class="desc_g"></p> </div> </div> <div id="editEntry" style="position:absolute;width:1px;height:1px;left:-100px;top:-100px"></div> <!-- DragSearchHandler - START --> <script src="//search1.daumcdn.net/search/statics/common/js/g/search_dragselection.min.js"></script> <!-- DragSearchHandler - END --> <div style="margin:0; padding:0; border:none; background:none; float:none; clear:none; z-index:0"></div> <script type="text/javascript" src="https://tistory1.daumcdn.net/tistory_admin/userblog/userblog-9f215d513ac1c1fc530f1b625c346be762e46741/static/script/common.js"></script> <script type="text/javascript">window.roosevelt_params_queue = window.roosevelt_params_queue || [{channel_id: 'dk', channel_label: '{tistory}'}]</script> <script type="text/javascript" src="//t1.daumcdn.net/midas/rt/dk_bt/roosevelt_dk_bt.js" async="async"></script> <script>window.tiara = {"svcDomain":"user.tistory.com","section":"글뷰","trackPage":"글뷰_보기","page":"글뷰","key":"2840920-18834","customProps":{"userId":"0","blogId":"2840920","entryId":"18834","role":"guest","trackPage":"글뷰_보기","filterTarget":false},"entry":{"entryId":"18834","entryTitle":"[JQUERY] jQuery를 모바일 : 문서 준비 대 페이지 이벤트","entryType":"POST","categoryName":"JQUERY","categoryId":"381321","serviceCategoryName":null,"serviceCategoryId":null,"author":"3264508","authorNickname":"cnpnote","blogNmae":"복붙노트","image":"","plink":"/entry/JQUERY-jQuery%EB%A5%BC-%EB%AA%A8%EB%B0%94%EC%9D%BC-%EB%AC%B8%EC%84%9C-%EC%A4%80%EB%B9%84-%EB%8C%80-%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%9D%B4%EB%B2%A4%ED%8A%B8","tags":["cordova","HTML","javascript","jQuery","jquery-mobile"]},"kakaoAppKey":"3e6ddd834b023f24221217e370daed18","appUserId":"null"}</script> <script type="module" src="https://t1.daumcdn.net/tistory_admin/frontend/tiara/v1.0.5/index.js"></script> <script src="https://t1.daumcdn.net/tistory_admin/frontend/tiara/v1.0.5/polyfills-legacy.js" nomodule="true" defer="true"></script> <script src="https://t1.daumcdn.net/tistory_admin/frontend/tiara/v1.0.5/index-legacy.js" nomodule="true" defer="true"></script> </body> </html>