2014-11-08 3 views
-1

웹 서비스가 있기 때문에 가끔 "ReferenceError : $ is not defined"오류가 발생합니다. 내가 뭘 생각하는지, jquery를로드하는 순서가 잘못 됐는지 알아. 스크립트를로드하려면 아래 코드를 따르십시오. Tooltip.js는 javascript/jquery가 포함 된 파일이며 오류가 발생하는 위치입니다.

function loadjscssfile(filename, filetype, level){ 
    if (filetype=="js"){ //if filename is a external JavaScript file 
     var fileref=document.createElement('script') 
     fileref.setAttribute("type","text/javascript") 
     fileref.setAttribute("src", filename) 
    } 
    parent.document.getElementsByTagName(level)[0].appendChild(fileref) 

} 

window.onload = function() { 
    loadjscssfile("//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js", "js", "head"); 
    loadjscssfile("//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/themes/smoothness/jquery-ui.css", "css", "head"); 
    loadjscssfile("//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js", "js", "head"); 
    loadjscssfile("...tooltip.js", "js", "head"); 

} 

다음 코드는 오류가 발생하는 곳입니다. $ (document) ...가 호출되는 곳과 같이 표시됩니다. 호출은 일반 javascript 앞에오고 jQuery 만 따라옵니다. 이것은 tooltip.js에 있습니다.

//some javascript functions 

$(document).ready(function() { 
     ... 
     //some jQuery functions 
     ... 
} 

난 내가의 주문을 한 것으로 나타났습니다 많은의 솔루션을 찾기 위해 모든 것을 검색했고, (자바 스크립트와 jQuery를 모두에서 초심자 많이하지 않은) 생각할 수있는 모든 시도 스크립트 로딩.

나에게있어서 진정한 키커는 때로는 잘 작동하지만 다른 경우에는 jQuery가로드되지 않는 것입니다 (따라서 ReferenceError). 누구든지 아이디어가 있습니까?

물론 대안은 자바 스크립트로 전체 스크립트를 다시 작성하는 것입니다.이 스크립트는 내가하고 싶은 것과 멀리 떨어져 있습니다. 추가 정보, 코드 또는 설명이 필요한 경우 알려주십시오.

편집 : js 파일을로드하려는 순서대로 첨부해도 문제가 발생했지만 순서대로로드되지 않았습니다. 해결 방법은 쿼리를로드하기위한 언로드 메서드를 사용하는 것입니다.이 메서드에서는 다른 파일을로드합니다. 그것은 작동하는 것 같습니다.

+0

jQuery가 작동하더라도'window.onload' 후에'$ (document) .ready (function()'이 호출되지 않으며 문제는'document.getElementsByTagName (level) [0] .appendChild (fileref) '스크립트가 하나씩 차례로로드된다는 것을 의미하지는 않습니다. 연결 속도와 파일 크기에 따라 다르므로 작은 tooltip.js를 먼저로드하고 실행할 수 있습니다. 필요한 스크립트가로드 된 후 종속 스크립트를 추가하십시오 (예 : - http://stackoverflow.com/a/3248500/1164491) – Cheery

+0

@Cheery this worked. 솔루션을 반영하기 위해 내 질문을 업데이트 할 것입니다. 귀하의 의견을 답장하면 받아 들일 것입니다. – Padge

답변

0

jquery를 잘못로드하는 순서가 맞습니다. 이유는 다음과 같습니다.

이벤트가 대기하고 모든 내용 (이미지 등)이로드 된 후에 만 ​​HTML 문서가 준비되는 즉시 ready 이벤트가 발생합니다.

onload이 (가) ready 이후에 발생하는 경우가 있습니다. 이론적으로 onload은 항상 ready 이후에 발생해야합니다.

JS 라이브러리를 사용할 수 있는지 페이지의 머리에 넣을 것입니다. 어떤 사람들은 모든 JS가 페이지 맨 아래에 있어야한다고 주장하지만,이 점에 대해 필자는 자신의 판단에 따라야한다고 주장한다. 모든 JS를 맨 아래쪽에 두는 것은 상황에 따라 장단점이 있습니다.

관련 문제