나는 다른 자바 스크립트 (내가 제어 할 수없는)를 포함하여 페이지의 다른 모든 것을 한 번만 실행 해야하는 jquery 스크립트가 있습니다.
나는 아마도 $ (document) .ready에 대한 대안이 있었지만 그것을 찾을 수 없었습니다.
답변
$(document).ready()
한 페이지에 여러 번 있을 수 있습니다 . 코드는 나타나는 순서대로 실행됩니다.
$(window).load()
페이지가 완전히로드되고 다양한 $(document).ready()
핸들러 의 모든 코드가 실행을 마친 후에 발생하므로 코드에 이벤트를 사용할 수 있습니다 .
$(window).load(function(){
//your code here
});
답변
이 코드 블록은 내 문제를 해결합니다.
<script type="text/javascript">
$(window).bind("load", function () {
// Code here
});
</script>
답변
다중 $(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>
답변
에서 여기 :
// 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>
답변
다른 프레임 워크 중 하나에서 제공하는 이벤트 리스너를 사용하여 스크립트를 시작하는 데 필요한 자바 스크립트 프레임 워크의 특이한 혼합 때문에 밝혀졌습니다.
답변
을 사용하여 모든 초기화 함수를로드하고 $().ready
마지막으로 원하는 jQuery 함수를 실행 해 보셨습니까 ?
로드하려는 기능을 호출하여 실행하려는 함수 setTimeout()
에 사용할 수 있습니다 $().ready
.
또는을 사용 setInterval()
하고 간격을 확인하여 다른 모든로드 기능이 완료되었는지 확인합니다 (부울 변수에 상태 저장). 조건이 충족되면 간격을 취소하고로드 기능을 실행할 수 있습니다.