2011-11-15 24 views
6

Tôi có tệp JavaScript, cũng sử dụng jQuery trong đó. Để tải nó, tôi đã viết mã này:tải jQuery vào một tệp js khác

function include(filename) 
{ 
    var head = document.getElementsByTagName('head')[0]; 
    var script = document.createElement('script'); 
    script.src = filename; 
    script.type = 'text/javascript'; 
    head.appendChild(script) 
} 

include('http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js'); 
alert("1"); 

$(document).read(function(){}); 
alert("2"); 

này bắn alert("1"), nhưng thứ hai alert không hoạt động. Khi tôi kiểm tra các phần tử, tôi thấy một lỗi có nội dung là $ không được xác định.

Tôi nên giải quyết vấn đề này như thế nào?

Trả lời

20

Bạn cần phải thực hiện bất kỳ mã cụ thể jQuery chỉ một lần kịch bản được tải trong đó rõ ràng là có thể xảy ra tại một điểm muộn hơn nhiều trong thời gian sau khi thêm nó vào phần đầu:

function include(filename, onload) { 
    var head = document.getElementsByTagName('head')[0]; 
    var script = document.createElement('script'); 
    script.src = filename; 
    script.type = 'text/javascript'; 
    script.onload = script.onreadystatechange = function() { 
     if (script.readyState) { 
      if (script.readyState === 'complete' || script.readyState === 'loaded') { 
       script.onreadystatechange = null;             
       onload(); 
      } 
     } 
     else { 
      onload();   
     } 
    }; 
    head.appendChild(script); 
} 

include('http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js', function() { 
    $(document).ready(function() { 
     alert('the DOM is ready'); 
    }); 
}); 

Và đây là live demo.

Bạn cũng có thể xem bộ tải tập lệnh như yepnope hoặc RequireJS giúp thực hiện tác vụ này dễ dàng hơn.

+3

+1 cho một câu trả lời chi tiết mà không cần phải ngay lập tức sử dụng bộ tải tập lệnh (có lẽ đó là những gì tôi đã làm :) –

-1

Vấn đề ở đây có thể là, mặc dù bạn bao gồm tập lệnh, điều đó không có nghĩa là nó được tải khi bạn cố gắng làm $(document).ready(function(){});. Bạn có thể nhìn vào Google Loader để ngăn chặn vấn đề này http://code.google.com/intl/fr-FR/apis/loader/

+0

Liên kết đó đã chết. – Evorlor

Các vấn đề liên quan