2017-11-05 7 views
0

지연을 사용할 때 "Uncaught ReferenceError : $ is not defined"오류가 발생했습니다.

Q.이 스크립트를 어떻게 올바르게 지연시킬 수 있습니까? 코드는 해당 스크립트에서

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> 
<script> 
    $(document).ready(function() { 
     $(window).scroll(function() { 
      if ($(this).scrollTop() > 600) { 
       $('.scrollup').fadeIn(); 
      } else { 
       $('.scrollup').fadeOut(); 
      } 
     }); 
     $('.scrollup').click(function() { 
      $("html, body").animate({ 
       scrollTop: 0 
      }, 600); 
      return false; 
     }); 
    }); 
    </script> 
<!--end--> 
+0

CDN은 정상입니다 ... 문제는 ..btw .. 내부 왜곡입니까? –

+1

jQuery 라이브러리에 의존하는 모든 스크립트를 지연시켜야 jQuery를 실행하거나로드 할 수 있습니다. 꽤 복잡해. 지연없이 jQuery를 그대로 두는 것이 가장 간단한 솔루션입니다. – instead

+0

일부 스크립트를 지연하려면 다른 스크립트에서 수행하십시오. 그러나 연기로 인해 주문을로드하는 스크립트는 다른 오류를 유발할 수 있음을 명심하십시오. – instead

답변

0

defer 결과 문서 구문 분석 된 후까지 실행되지 않습니다. 이 스크립트 (이 경우 jQuery에 종속 됨)에 의존하는 다른 스크립트 인 경우 defer을 추가해야하며 (defer을 사용하면로드 순서가 유지됩니다) 그렇지 않은 경우 보다 먼저 ed 스크립트를로드 할 수 있습니다.

당신이 defer 에드 스크립트에 의존 인라인 스크립트가있는 경우 외부 파일로 이동해야합니다 (그리고 src & defer 추가) 인라인 스크립트가 연기 될 수 없기 때문에.

+0

페이지를 살펴볼 수 있습니까? 나는 코더가 아니다. https://www.thehangoutrestaurant.com/ –

+0

@CallMeNicholi 페이지를 보면 아무 것도 바뀌지 않습니다. 설명했듯이 :'지연 스크립트에 의존하는 인라인'

0

setInterval() 함수를 사용하면 jQuery가 준비 될 때까지 기다릴 수 있습니다.

function start_scripts(){ 
    $(document).ready(function() { 
     $(window).scroll(function() { 
      if ($(this).scrollTop() > 600) { 
       $('.scrollup').fadeIn(); 
      } else { 
       $('.scrollup').fadeOut(); 
      } 
     }); 
     $('.scrollup').click(function() { 
      $("html, body").animate({ 
       scrollTop: 0 
      }, 600); 
      return false; 
     }); 
    }); 
} 

var jQ_interval = setInterval(function(){ 

    if(typeof jQuery == 'function'){ 
     clearInterval(jQ_interval); 
     start_scripts(); 
    } 

}, 300); // You can change 300 to other delay 

실행할 코드가 더 많으면이 방법을 사용하지 않는 것이 좋습니다. 더 나은 해결책은 jQuery를 연기하는 것이 아니라 다른 스크립트를 지연시키는 것입니다.

+1

jQuery가 주어진 구간보다 더 많은 시간이 걸리면 어떻게 될까요? 그것이 더 적게 걸리는 경우에 무엇? –

+0

이것은 300 밀리 초마다 간단한 if 문을 실행하면 사용자 CPU를 해치지 않을 것입니다. jQuery로드가 300 밀리 초 미만이면 문제가되지 않습니다. 지연은 눈에 띄지 않습니다. – instead

+0

예쁜 kludgy입니다. '지연 (defer) '을 사용하는 작업을한다면, 실제로 인라인 스크립트가 없어야합니다. jQuery가 어떤 이유로 든로드되지 않는다면 오류를 숨길 것입니다. 결코 실패하지 않을 것이기 때문에 자동으로 다시 시도하는 디버깅을 어렵게 만듭니다. –