2012-11-25 57 views
7
(function($) { 
    $.fn.top_islides = function(){ 
     var ajax_init = function(){ 
      init_islides(); 
      setTimeout(function(){picmove()},300); 
     }; 
//..... 
    }; 
})(jQuery); 

gọi nó trong doucument sẵn sàng trong một tập tinCách gọi hàm trong plugin jquery?

$('#top_slides').top_islides(); 
$('#top_slides').top_islides().ajax_init(); 

Tôi nghĩ rằng nó sẽ làm việc, tôi đã nhận ra lỗi, vấn đề là những gì?

Trả lời

5

Làm điều đó như thế này:

(function($) { 
    //Assuming $.fn.top_islides is defined 
    $.fn.top_islides.ajax_init = function(){ 
     init_islides(); 
     setTimeout(picmove,300); 
    }; 
//..... 
})(jQuery); 

Hoặc

(function($) { 
    $.fn.top_islides = function(){ 
     var ajax_init = function(){ 
      init_islides(); 
      setTimeout(picmove,300); 
     }; 
     return { 
      ajax_init: ajax_init 
     }; 
    }); 
    //..... 
})(jQuery); 
+1

okay tôi đã nhận nó hoạt động bằng mã của bạn nhờ – FatDogMark

3

Hãy thử một cái gì đó như thế này như trong ví dụ dưới đây: -

<script type="text/javascript"> 


    $.someplugin = { 
     CallMe : function() { 
      alert("You called?"); 
     }, 
     otherstuff : function() { alert("other stuff!"); } 
    }; 


    $.someplugin.CallMe(); 
    $.someplugin.otherstuff(); 
</script> 
+0

tôi đã thay đổi để \t ajax_init: function() { \t \t \t init_islides(); \t \t \t setTimeout (function() {picmove()}, 300); \t \t}; nhưng lỗi nói SyntaxError: tuyên bố chức năng yêu cầu một tên – FatDogMark

0

khi sử dụng var bên trong một hàm, nó sẽ làm cho phần tử "riêng tư". đó là một cách hacky để làm cho khả năng hiển thị trong công việc Javascript, trong khi cấu trúc lớp thực sự không đến với Javascript. Bạn cần phải hoặc đặt nó là nguyên mẫu của hàm của bạn hoặc để trả lại một đối tượng

(function($) { 
    $.fn.top_islides = function(){ 
    var ajax_init = function(){ 
     init_islides(); 
     setTimeout(function(){picmove()},300); 
    }; 
    return { 
     'ajax_init': ajax_init 
    }; 
    //..... 
    }; 
})(jQuery); 

hoặc

(function($) { 
    $.fn.top_islides = function(){ 
    //..... 
    }; 
    $.fn.top_islides.prototype.ajax_init = function(){ 
    init_islides(); 
    setTimeout(function(){picmove()},300); 
    } 
})(jQuery); 

nhưng trong trường hợp của bạn, bạn sẽ không thể sử dụng nguyên mẫu, kể từ khi bạn aren' t instantiating một đối tượng mới top_islides, nhưng truy cập thông qua jQuery, vì vậy tùy chọn đầu tiên là đặt cược tốt nhất của bạn.

+0

bạn có thể giải thích thêm một chút về 'trở về', tôi không hiểu, làm thế nào để gọi giá trị trả lại? – FatDogMark

+0

'return' thực hiện ý nghĩa của tên, trả lại nội dung nào đó từ hàm. nếu bạn muốn trả về nhiều hơn một giá trị, bạn cần sử dụng một đối tượng và đặt tên cho mỗi phần tử trả về. Bạn có thể trả về các biến, hàm hoặc các đối tượng khác, và bạn sẽ gọi nó là '$ ('element'). Top_islides(). Funct()' hoặc '$ ('element'). Top_islides(). Variable' hoặc một đối tượng' $ ('element'). top_islides(). obj.property() ' – pocesar

0

Imo, giải pháp tốt nhất được sử dụng trình kích hoạt sạch hơn vì bạn có thể giữ hệ thống plugin có thể kết nối.

Bạn có thể tuyên bố xử lý sự kiện trong khai plugin của bạn và kích hoạt từ bên ngoài:

(function($) { 
    $.fn.top_islides = function(){ 
    this.on ('init_islides', function(){ 
     setTimeout(function(){picmove()},300); 
    }; 
    //..... 
    }; 
})(jQuery); 
$("button").click(function() { 
    $("p").trigger("init_islides"); 
}); 

DOC có thể được tìm thấy ở đây: http://api.jquery.com/on/

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