2013-10-24 53 views
3

我的問題是如何如何添加一些jQuery插件完成回調

$('#Div').myPluginLoad(); 

添加完成回調是這樣的...

$('#Div').myPluginLoad().done(function(){ 
    alert('task finished..!!'); 
}); 

添加一些jQuery的普金像這樣的例子...到在我的插件執行其它功能....

(function ($) { 

    $.fn.extend({  
     myPluginLoad: function (options) {  

      // defaults 
      var defaults = { 
       padding: 20, 
       mouseOverColor: '#000000', 
       mouseOutColor: '#ffffff' 
      }  
      var options = $.extend(defaults, options);  
      return this.each(function() {  
       /** 
       * SOME ASYNC TASK 
       **/  
      }); 
     } 
    }); 
})(jQuery); 

Plz,help !!

+0

您將停止返回this.each,而是生成一個defferrd對象並返回它的promise對象,然後在想要完成回調時發生解析。 –

回答

3

像這樣的東西應該工作:

(function ($) { 

    $.fn.extend({  
     myPluginLoad: function (options) {  
      var def = $.Deferred(); 

      // defaults 
      var defaults = { 
       padding: 20, 
       mouseOverColor: '#000000', 
       mouseOutColor: '#ffffff' 
      }  
      var options = $.extend(defaults, options); 
      var deferredList = []; 

      this.each(function() { 
       var innerDef = $.Deferred(); 
       deferredList.push(innerDef.promise()); 

       $.ajax({...}) //just for example 
       .done(function() { 
        innerDef.resolve();      
       }); 
      }); 

      $.when.apply($, deferredList).done(function() { 
       def.resolve(); 
      }); 

      return def.promise(); 
     } 
    }); 
})(jQuery); 

您將需要創建一個延遲對象返回表示當所有項目已完成加載。然後,您需要爲this.each()的每次迭代創建另一個延遲。當所有這些延期申請都得到解決後,請解決您返回的問題。

+0

這工作非常適合我...這是我正在尋找的東西,以及每一個實例,保持你自己的價值。非常感謝...!! – IvanVazquez

+0

抱歉沒有投票答案,但我沒有足夠的積分讓我投票.... – IvanVazquez

+0

不用擔心,很高興我能幫上忙。即使你無法贊成,你也應該能夠接受答案。 –

0

延遲對象。

(function ($) { 

    $.fn.extend({  
     myPluginLoad: function (options) {  

      // defaults 
      var defaults = { 
       padding: 20, 
       mouseOverColor: '#000000', 
       mouseOutColor: '#ffffff' 
      } 
      var options = $.extend(defaults, options); 
      return $.Deferred(function(def){ 
       // the async task 
       setTimeout(function(){ 
        def.resolve(); 
       },5000); 
      }).promise(); 
     } 
    }); 
})(jQuery); 
0

你的意思是回調?

(function ($) { 

    $.fn.extend({  
     myPluginLoad: function (options,callback) {  

      // defaults 
      var defaults = { 
       padding: 20, 
       mouseOverColor: '#000000', 
       mouseOutColor: '#ffffff' 
      }  
      var options = $.extend(defaults, options);  
      return this.each(function() {  
       /** 
       * SOME TASK 
       **/  
      }); 
      if (typeof callback == 'function') { // make sure the callback is a function 
       callback.call(this); // brings the scope to the callback 
      } 
     } 
    }); 
})(jQuery); 

然後使用它像這樣

$('#Div').myPluginLoad({ 
    callback:function(){ 
     //do your thing here 
    } 
}); 
+0

是的......我說過回調,但是我在尋找的是當在插件中完成任務時,執行另一個外部函數,但只有在完成時。但是,這個答案幫助我解決了另一個問題,無論如何。 – IvanVazquez

+0

很高興知道,在以某種方式幫助你.. :) – writeToBhuwan