2013-08-26 99 views
2

我有這樣的jQuery插件,看起來像這樣:如何在函數執行功能

(function($){ 

$.fn.s3Slider = function(vars) {  

    // (...) 
    timeOutFn = setTimeout(makeSlider, thisTimeOut); 
    // (...) 

    var makeSlider = function() { 

     // next Image 

    } 

    makeSlider(); 

}; 

})(jQuery); 

我可以

jQuery(document).ready(function() { 
    jQuery('#s3slider').s3Slider({ 
     timeOut: 4000 
    }); 
}); 

現在我的問題,我怎麼能執行makeSlider啓動()函數從外面? 這是一個圖像滑塊,我想添加一個Next Button功能。

我想是這樣的,但它是錯的

jQuery.s3Slider.makeSlider(); 
+0

@Neal抱歉沒有意識到他想要它功能之外 –

回答

2

您可以返回包含要揭露函數的引用對象:

(function($){ 

    $.fn.s3Slider = function(vars) {  

     ... 

     function next(){ 
      // Advance the slide here 
     } 

     // Return only the functions that you want to expose 
     return { 
      next: next 
     }; 
    } 

}; 

})(jQuery); 

然後你可以使用它如:

var s3Slider = jQuery('#s3slider').s3Slider({ 
    timeOut: 4000 
}); 

s3Slider.next(); 
+0

我認爲這是最簡單的解決方案。謝謝你,這有效:) – user2719160

0
$.fn.s3Slider = function(...) { 

    ... 

    return { makeSlider: makeSlider }; 
} 
0

目前makeSlider只存在於s3Slider函數的範圍內。

爲什麼不讓makeSlider它自己的插件,然後有s3Slider(和你)的電話?

(function($){ 
    $.fn.makeSlider = function(){ 
     // Next image 
    }; 

    $.fn.s3Slider = function(vars){ 
     // Your code 
     var that = this; 
     setTimeout(function(){ 
      $(that).makeSlider(); 
     }, thisTimeOut); 
    }; 
})(jQuery); 
0

你可以實現你想要的,但它有點複雜。

變化

$.fn.s3Slider = function(vars) {  
    // (...) 
    timeOutFn = setTimeout(makeSlider, thisTimeOut); 
    // (...) 
    var makeSlider = function() { 
     // next Image 
    } 
    makeSlider(); 
}; 

$.fn.s3Slider = (function(){ 
    var makeSlider; 
    var f = function(vars) {  
     // (...) 
     timeOutFn = setTimeout(makeSlider, thisTimeOut); 
     // (...) 
     makeSlider = function() { 
      // next Image 
     } 
     makeSlider(); 
    }; 
    f.makeSlider = makeSlider; 
    return f; 
})(); 

之後,你既可以使用s3Slider功能

$(someElement).s3Slider() 

,做

$.fn.s3Slider.makeSlider(); 

$(someElement).s3Slider.makeSlider(); 

從外部訪問makeSlider

+0

's3Slider'是'$ .fn'(它是'jQuery.prototype'的別名)的屬性。 'jQuery.s3Slider'沒有在你的答案中定義。你必須做'$(someElement).s3Slider()。makeSlider()'(或'$ .fn.s3Slider.makeSlider();')。 –