2013-04-19 3 views
7

이상한 상황 JQuery와 기능을로드하는 방법 :문서 만 마무리 로딩 후

내가 jQueryCSS를 사용하여 메뉴 표시 줄을 구축하고 있습니다. 난, 어떤 이유로 ...

function mark_active_menu() { 
    var elementWidth = $("nav li").width(); 
    alert(elementWidth); 
} 

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

심지어 전 모든 문서 마무리 로딩을 내 자바 스크립트 파일에서
는, 나는 on-ready 기능과 같이이 잘못된 너비의 경고 메시지가 나타납니다. 메시지를 릴리스 할 때만 나머지 문서가로드되고 올바른 폭을 얻게됩니다.

모든 문서가로드되기 전에 내 기능이 호출되는 이유는 무엇입니까? 특정 요소가 로딩 된 후에 만 ​​함수를로드 할 수 있습니까 (예 : nav 요소)?

+1

로드중인 부품 : 내 코드에서

그것은 다음과 같습니다? –

+0

'$ (window) .on ('resize', fn)'또는'$ (window) .on ('load', fn)'에 연결할 수 있습니다. –

+0

또한'ready()'메서드는 eventObject가 아니라 jQuery 객체 자체를 전달합니다. –

답변

11

window.load을 사용할 수 있습니다. 모든 리소스로드가 완료되면 트리거됩니다.

$(window).load(function(e) { 
    mark_active_menu(); 
}); 

문서로드 프로세스의 끝에있는로드 이벤트가 발생합니다. 이 시점 에서 문서의 모든 객체는 DOM에있는 모든 이미지와 서브 프레임은 Reference

+1

그건 말이되지 않습니다. selector는'$ ("nav li")'... 어떤 이미지 나 프레임도 보이지 않습니다 ... 문제는 AJAX가 컨텐트를로드하는 것입니다. – Ian

+0

@lan 내 코드에는 AJAX가 있지만 아무도 문서를로드하지 않고 사용자가 트리거 한 후에 만 ​​ –

+0

@Lior ** 따라서 ** 사용자가이를 트리거 할 때까지 아무 것도 페이지에 올려지지 않으면 어떻게됩니까? $ (document) .ready'는 적시에 실행됩니까? 어쨌든'$ (window) .load'는 같은 이유로 귀하의 문제에 아무런 차이가 없어야합니다. – Ian

2

창 시도, 확실히, 로딩이 완료 load

$(window).load(function(e) { 
    mark_active_menu(); 
} 
+0

차이점이 없습니다. 문제는 AJAX가 콘텐츠를로드하는 것입니다. – Ian

3

창로드 이벤트에보십시오 :

$(window).load(function() { 
    //Stuff here 
}); 
+0

차이점이 없습니다. 문제는 AJAX가 콘텐츠를로드하는 것입니다. – Ian

5

모든 현재의 솔루션은 주요 문제의 증상을 치료한다. 모든 Ajax가로드 된 후에 처리기가 을 실행하도록하려면 약속을 사용할 수 있습니다.

var ajax1 = $.ajax(); 
var ajax2 = $.ajax(); 

jQuery(function($) { 
    $.when.apply($, [ajax1, ajax2]).done(function() { 
     // your code here 
    }); 
}); 
+0

다른 답변은 AJAX를 고려하지 않습니다. AJAX 요청은'window.onload'가 실행될 때까지 수행되거나 수행되지 않을 수 있습니다. 이것은 올바른 대답입니다. 나는 upvote 줄 알았는데 더 투표가 남아있다 : ​​( – Ian

+0

감사합니다,이 매우 잘 작동합니다. 어쨌든 실제로 더 빨리 일어날 수 있나요? 동적으로로드 된 div 내에서 텍스트를 바꿀 필요가, 그것은 작동합니다. , 약간의 지연이 있습니다. –

0

(때로는 처음에 절대적으로로드되지 않습니다 (후 몇 밀리 초 0-200ms에 대한))하기 전에 :

$(document).ready(function(){ 
$('body').hide(0); 
}); 

후 :에서

$(window).load(function(){ 
$('body').delay(500).show(0); 
}); 
0

내 AJAX와 HTML로 작업하는 상황. 나는 함수 $ (document) .ready()와 $ (window) .load()와 같은 문제가있다. 나는 HTML DOC에서 작동해야하는 내 이벤트 핸들러를 AJAX reguest가 끝난 직후 실행되는 jQuery 함수에 추가하여이 문제를 해결했다. 읽기 : " jQuery.post()" (함수의 세 번째 매개 변수). 아약스와 문서의

var RequestRootFolderContent = function(){ 
    $.post(
     'PHP/IncludeFiles/FolderContent.inc.php', 
     function(data){ 
      $('[class~="folder-content"]').html(data); 

      //Here what you need 
      $('[class~="file"]').dblclick(function(){ 
       alert("Double click"); 
      }); 
     } 
    ) 
} 
관련 문제