fancybox를 사용하다가 이상하다고 생각해서 찾아봄

fancybox에

J(document).ready

를 선언해서 사용하면

이게 정상적으로 동작하는게 이상해서..

 

 

function test1(){
  J(document).ready(function(){
   alert(1);
  });
 }

 function test2(){
  window.onload=function(){
   alert(2);
  }

 }

//]]>

<a href="#" onclick="test1();">test1</a>
<a href="#" onclick="test2();">test2</a>

 

라는 소스가 있으면

test1은 출력을 하지만

test2는 출력하지 않음

우리가 보통 window.onload 혹은

body.onload 대용의 느낌으로 ready를 사용하는데

실제로는 차이가 있다.

나도 저걸 테스트 하기전에는

ready는

onload 이벤트를 attach하는거라고 생각했다.

 

실제로 jquery를 보면

 

if ( document.readyState === "complete" ) {
   // Handle it asynchronously to allow scripts the opportunity to delay ready
   setTimeout( jQuery.ready );

  // Standards-based browsers support DOMContentLoaded
  } else if ( document.addEventListener ) {
   // Use the handy event callback
   document.addEventListener( "DOMContentLoaded", completed, false );

   // A fallback to window.onload, that will always work
   window.addEventListener( "load", completed, false );

  // If IE event model is used
  } else {
   // Ensure firing before onload, maybe late but safe also for iframes
   document.attachEvent( "onreadystatechange", completed );

   // A fallback to window.onload, that will always work
   window.attachEvent( "onload", completed );

   // If IE and not a frame
   // continually check to see if the document is ready
   var top = false;

   try {
    top = window.frameElement == null && document.documentElement;
   } catch(e) {}

   if ( top && top.doScroll ) {
    (function doScrollCheck() {
     if ( !jQuery.isReady ) {

      try {
       // Use the trick by Diego Perini
       // http://javascript.nwbox.com/IEContentLoaded/
       top.doScroll("left");
      } catch(e) {
       return setTimeout( doScrollCheck, 50 );
      }

      // detach all dom ready events
      detach();

      // and execute any waiting functions
      jQuery.ready();
     }
    })();
   }
  }

 

이런부분이 있다

현재 문서상태가 complete가 아니면 onload이벤트에 넣고

complete이면 바로 실행시키는것

Posted by 삽지리
,