다른 모든 것이로드 될 때까지 jquery 스크립트 지연


112

나는 다른 자바 스크립트 (내가 제어 할 수없는)를 포함하여 페이지의 다른 모든 것을 한 번만 실행 해야하는 jquery 스크립트가 있습니다.

나는 아마도 $ (document) .ready에 대한 대안이 있었지만 그것을 찾을 수 없었습니다.

답변:


217

$(document).ready()한 페이지에 여러 번 있을 수 있습니다 . 코드는 나타나는 순서대로 실행됩니다.

$(window).load()페이지가 완전히로드되고 다양한 $(document).ready()핸들러 의 모든 코드가 실행을 마친 후에 발생하므로 코드에 이벤트를 사용할 수 있습니다 .

$(window).load(function(){
  //your code here
});

1
이 방법을 사용하여 외부 스크립트를 가져올 수 있습니까?
chrism

1
물론 이미 $ (document) .ready () 내에서이 작업을 수행하고 있다면 다르지 않습니다.
Jose Basilio

7
이 답변은 jquery 코드가 순서대로 실행된다는 것을 몰랐기 때문에 유용했습니다.
Sevenearths

1
정말 고맙습니다! 이것은 페이지가 (분명히) 아직로드되지 않았기 때문에 올바른 높이를 얻지 못하는 내 .height () 문제를 해결했습니다.
Jon

6
JQuery 3.0에서는 $(window).on('load', function() { });$ (window) .load ()가 더 이상 사용되지 않으므로 구문을 사용해야합니다 .
Alex H

13

이 코드 블록은 내 문제를 해결합니다.

<script type="text/javascript">
  $(window).bind("load", function () {
    // Code here
  });
</script>


jQuery가 이미로드되었는지 확인하기 위해 jQuery 함수를 어떻게 실행할 수 있습니까? 이것은 검사 전에 jQuery가로드 된 경우에만 작동합니다.
HelpNeeder

11

다중 $(document).ready()은 페이지에서 위에서 아래로 순서대로 실행됩니다. 마지막 $(document).ready()은 페이지에서 마지막으로 실행됩니다. 마지막 $(document).ready()에서 새 맞춤 이벤트를 트리거하여 다른 모든 이벤트 이후에 실행할 수 있습니다.

새 사용자 지정 이벤트에 대한 이벤트 처리기에서 코드를 래핑합니다.

<html>
<head>
<script>
    $(document).on("my-event-afterLastDocumentReady", function () {
        // Fires LAST
    });
    $(document).ready(function() {
        // Fires FIRST
    });
    $(document).ready(function() {
        // Fires SECOND
    });
    $(document).ready(function() {
        // Fires THIRD
    });
</script>
<body>
... other code, scripts, etc....
</body>
</html>

<script>
    $(document).ready(function() {
        // Fires FOURTH
        // This event will fire after all the other $(document).ready() functions have completed.
        // Usefull when your script is at the top of the page, but you need it run last
        $(document).trigger("my-event-afterLastDocumentReady");
    });
</script>

3

에서 여기 :

// Add jQuery 
var GM_JQ = document.createElement('script'); 
GM_JQ.src = 'http://jquery.com/src/jquery-latest.js';
GM_JQ.type = 'text/javascript'; 
document.getElementsByTagName('head')[0].appendChild(GM_JQ); 

// Check if jQuery's loaded 
function GM_wait() 
{ 
    if(typeof unsafeWindow.jQuery == 'undefined') 
    { 
        window.setTimeout(GM_wait,100); 
    } 
    else 
    { 
        $ = unsafeWindow.jQuery; 
        letsJQuery(); 
    } 
} 

GM_wait(); 

// All your GM code must be inside this function 
function letsJQuery() 
{
    // Do your jQuery stuff in here    
} 

이것은 jQuery가로드 될 때까지 기다릴 것입니다. 그러나 동일한 개념을 사용하여 다른 스크립트에서 변수를 설정 (또는 스크립트가 아닌 경우 확인)하여로드 될 때까지 기다릴 수 있습니다.

예를 들어, 내 사이트에서 나는 비동기 JS 로딩에 이것을 사용하고 jQuery를 사용하여 작업하기 전에 완료 될 때까지 기다립니다.

<script type="text/javascript" language="JavaScript"> 
    function js(url){
        s = document.createElement("script");
        s.type = "text/javascript";
        s.src = url;
        document.getElementsByTagName("head")[0].appendChild(s);
    }       

    js("/js/jquery-ui.js");
    js("/js/jrails.js");
    js("/js/jquery.jgrowl-min.js");
    js("/js/jquery.scrollTo-min.js");
    js("/js/jquery.corner-min.js");
    js("/js/jquery.cookie-min.js");
    js("/js/application-min.js");

    function JS_wait() {
        if (typeof $.cookie == 'undefined' || // set in jquery.cookie-min.js
            typeof getLastViewedAnchor == 'undefined' || // set in application-min.js
            typeof getLastViewedArchive == 'undefined' || // set in application-min.js 
            typeof getAntiSpamValue == 'undefined') // set in application-min.js
        { 
            window.setTimeout(JS_wait, 100); 
        }
        else 
        { 
            JS_ready(); 
        }
    }

    function JS_ready() {
        // snipped
    };

    $(document).ready(JS_wait);
</script> 

이것은 jQuery가로드 될 때까지만 기다리며 페이지의 다른 측면은 무시합니다. @require 지시문을 지원하지 않는 이전 버전의 greasemonkey에 대한 해킹에 지나지 않습니다.
Cheekysoft 2009-06-18

1
다른 코드가로드 될 때까지 기다리기 위해 jQuery와 동일한 개념을 사용하는 방법에 대한 예제로 내 코드를 추가했습니다.
Chris Doggett

1

다른 프레임 워크 중 하나에서 제공하는 이벤트 리스너를 사용하여 스크립트를 시작하는 데 필요한 자바 스크립트 프레임 워크의 특이한 혼합 때문에 밝혀졌습니다.


3
당신이 해결책을 찾았지만 당신의 대답은 ... 자세한 내용은없이 다른 사람의 도움이되지 않습니다 행복
앤드류

1

을 사용하여 모든 초기화 함수를로드하고 $().ready마지막으로 원하는 jQuery 함수를 실행 해 보셨습니까 ?

로드하려는 기능을 호출하여 실행하려는 함수 setTimeout()에 사용할 수 있습니다 $().ready.

또는을 사용 setInterval()하고 간격을 확인하여 다른 모든로드 기능이 완료되었는지 확인합니다 (부울 변수에 상태 저장). 조건이 충족되면 간격을 취소하고로드 기능을 실행할 수 있습니다.


무슨 뜻인지 잘 모르겠습니다. jquery 스크립트를 통해 모든 스크립트를 가져오고 내 스크립트를 마지막에 넣는 것이 좋습니다. 그렇다면 그것은 어떻게
생겼을까

$ (document) .ready (function () {callLoadFunction1 (); callLoadFunction2 (); calljQueryLoadFunction ();});
Richard Clayton

다른 스크립트는 모두 외부 파일이므로 이것이 작동할지 확신 할 수 없습니까?
chrism

@chrism : 두 번째 예를 참조하십시오. 다른 외부 JS 파일이로드되었음을 나타내는 변수가 설정 될 때까지 기다립니다. 마지막으로 실행하려는 코드를 JS_ready () 메서드에 넣습니다. 그것은 당신이 찾고있는 것을 정확히 수행합니다.
Chris Doggett

2
그냥 사용$(window).load(function(){...})
Ryan Taylor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.