2012-03-10 62 views
1

有一點困難。嘗試在插件中公開方法stop()。多個插件實例可能正在頁面上運行。我希望能夠做到以下幾點:JQuery插件:如何暴露與實例綁定的公共方法

​​

我有以下幾點:

; (function ($) { 

    $.fn.myslider = function (options) { 
     var defaults = { 
      interval: 2000 
     }; 
     var o = jQuery.extend(defaults, options); 

     return this.each(function() { 

      var slider = $(this); 

      var timer; 
      var active; 

      var rotateSwitch = function() { 
       timer = setInterval(function() { 
        active = $('.slider_active', slider).next(); 
        if (active.length === 0) { 
         active = $('.slider_paging a:first', slider); 
        } 
        rotate(); 
       }, o.interval); 
      }; 

      rotateSwitch(); 
      ... 
     }); 

    }; 
})(jQuery); 

如何將暴露,我可以要求一個特定實例的stop()方法?

+0

它究竟會做什麼?在'timer'上調用'clearInterval()'? – 2012-03-10 17:25:30

+0

@lilaG是的,將清除定時器的時間間隔 – Chev 2012-03-10 18:06:57

回答

0

通常的方法是讓你的插件功能接受命令字符串,例如:

$(selector).slider("stop"); 

這就是jQuery的用戶界面的各種插件做,例如。所以你可以修改你的函數來測試它是否收到一個選項對象(你當前的代碼)或一個命令字符串,並相應地採取行動。

在您的具體情況下,您必須將定時器值存儲在相關元素中,可能使用data函數。

+0

是的,這是最好的方式 - 如果你尋找一些代碼,如何實現這個很好的模式是:https://github.com/twitter/bootstrap/ blob/master/js/bootstrap-alert.js:請參閱底部的插件定義 – nav 2012-03-10 18:14:55