2010-09-17 12 views
6

Tôi đang xây dựng một plugin jQuery tùy chỉnh cho một dự án tôi đang làm việc trên. Tôi muốn trả lại một đối tượng tùy chỉnh cho một plugin jQuery ... thay vì phải đảm bảo rằng mỗi trang sử dụng plugin của tôi cũng có plugin này, có thể đưa nó vào trong plugin thực tế không?Làm thế nào để bao gồm một plugin bên ngoài bên trong của một plugin jQuery được tác giả

Thay vì gõ như sau trên mỗi trang có sử dụng plugin của tôi:

<script type="text/javascript" src="url_to_my_plugin" /> 
<script type="text/javascript" src="url_to_plugin" /> 

tôi muốn để xem nếu có là một lựa chọn mà sẽ cho phép một cái gì đó như:

(function($) { 
      $.include('url_to_plugin'); 
      //code to implement my plugin 
})(jQuery); 

Cảm ơn đã gợi ý Marko ... Tôi có thể làm điều gì sai vì plugin tôi đang tham chiếu không được công nhận. Dưới đây là mã của tôi:

(function($) { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'jquery.simplemodal.js'; //in same dir as my plugin 
    //tried both 
    document.body.appendChild(script); 
    document.getElementsByTagName('head')[0].appendChild(script); 

    $.fn.SUI_CheckProgress = function(options) { 
      return this.each(function() { 
       var obj = $(this); 
       var nDiv = $('<div>'); 
       nDiv.modal(); //error nDiv.modal() is not a function 
       $(obj).append(nDiv); 
      } 
    }; 
}); 

Tôi đã cố gắng khai báo tập lệnh cả bên trong và bên ngoài cuộc gọi hàm thực tế (lý tưởng cho nó xảy ra trên toàn cầu). Tôi đã xác minh mã thực thi chính xác nếu tôi tham chiếu tập lệnh trong trang mà tôi đang gọi, tuy nhiên khi tôi xóa tham chiếu, mã sẽ không thành công. Bất kỳ thông tin bổ sung nào về cách thêm các tập lệnh theo chương trình vào một trang sẽ được đánh giá cao.

Đã sửa lỗi: Vấn đề của tôi là tôi đã tham chiếu cùng thư mục với plugin js, tuy nhiên khi nó được thêm vào trang nằm ngoài thư mục đó.

script.src = 'jquery.simplemodal.js'; 

cố định

script.src = 'js/jquery.simplemodal.js'; 
+0

Bạn không cần phải làm 'obj' thành một jquery đối tượng hai lần ... sử dụng 'obj.append (nDiv)' – Mottie

+0

thực sự là do cuộc gọi được nhúng bên trong một cuộc gọi ajax, tôi đã để lại công cụ ajax ra tho để đơn giản hóa. – jon3laze

Trả lời

2

chắc - bạn có thể tạo ra một yếu tố kịch bản mới và thêm nó vào đầu.

var script = document.createElement('script'); 
script.src = 'url-to-plugin'; 
script.type = 'text/javascript'; 
document.getElementsByTagName('head')[0].appendChild(script); 

Nếu điều này không làm việc, có thể thử phương pháp trên this page, đó là một cách tiếp cận hơi khác nhau sử dụng setAttribute.

+0

Cảm ơn bạn đã phản hồi nhanh chóng. Tôi không thể nhận được mã để hoạt động, tôi đã cập nhật bài đăng của mình để bao gồm mã và vấn đề. Cảm ơn – jon3laze

+0

Bạn vẫn gặp sự cố? Tôi nhận thấy bạn đã chấp nhận câu trả lời của tôi ... Tôi đã chỉnh sửa bài đăng của mình để bao gồm một phương pháp khác để thiết lập các thuộc tính của phần tử 'script'. Bạn có thể vui lòng kiểm tra phần '' bằng Firebug và xem liệu có bất kỳ thứ gì được thêm vào không? – Marko

+0

Cảm ơn Marko hiện đang hoạt động. Tôi đã suy nghĩ về cấu trúc tập tin không chính xác. Tôi đã tham khảo các plugin js như thể nó nằm trong cùng thư mục với plugin của tôi vì nó là ...tuy nhiên khi được thêm vào trang thực tế thì không. : P – jon3laze

3

Bạn cũng có thể sử dụng chức năng getScript từ jQuery.

Nó có thể được sử dụng với callbacks cho sự thành công và/hoặc thất bại như:

$.getScript("somejs.js", function(data, textStatus, jqxhr) { 
    console.log("callback");  
} 

$.getScript("somejs.js") 
.done(function(script, textStatus) { 
    console.log("done callback"); 
}) 
.fail(function(jqxhr, settings, exception) { 
    console.log("fail callback"); 
});  

Hoặc mà không gán một callback như:

$.getScript("somejs.js");