2012-03-28 344 views
0

我已經閱讀了堆棧溢出的幾個類似的情況,但沒有一個完全像我的。這裏是我的jQuery插件的要點:)如何編寫接受回調函數的jQuery插件方法?

(function($) { 
    var methods = { 
     init: function() { 
      ... 
      $(this).myPlugin("close"); 
      $(this).myPlugin("open"); 
     }, 
     open: function() { 
      ... 
     }, 
     close: function() { 
      ... 
     } 
    } 
})(jQuery); 

開(閉()方法包括jQuery的效果基本show()和了slideDown()方法,所以我需要能夠調用close()方法,然後調用open()方法作爲回調。但是,當我嘗試this solution我沒有運氣。

回答

0

根據記錄,這不起作用:

(function ($) { 
    "use strict"; 

    var methods = { 
     init: function() { 
      return this.each(function() { 
       $(this).click(function() { 
        $(this).myPlugin("close", function() { 
         $(this).myPlugin("open"); 
        }); 
       }); 
      }); 
     }, 
     open: function() { 
      return this.each(function() { 
       console.log("open was called"); 

       $(this).children(":hidden").slideDown("slow"); 
      }); 
     }, 
     close: function (callback) { 
      return this.each(function() { 
       console.log("close was called"); 

       $(this).children(":visible").slideUp("slow"); 

       callback.call($(window)); 
      }); 
     } 
    }; 
}(jQuery)); 

上面的代碼清楚地表明,在jQuery的幻燈片動畫的情況下,在調用open方法之前,腳本的執行不會等待close方法完成。這裏的解決方案,我最終決定採用,使用jQuery承諾方法:

(function ($) { 
    "use strict"; 

    var methods = { 
     init: function() { 
      return this.each(function() { 
       $(this).click(function() { 
        $(this).myPlugin("toggle"); 
       }); 
      }); 
     }, 
     toggle: function() { 
      return this.each(function() { 
       var $openBox = $(this).children(":visible"), 
        $closedBox = $(this).children(":hidden"); 

       $openBox.slideUp("fast").promise().done(function() { 
        $closedBox.slideDown("fast"); 
       }); 
      }); 
     } 
    }; 
}(jQuery)); 
2
(function($) { 
var methods = { 
    init: function() { 
     ... 
     $(this).myPlugin("close",function() { 
      $(this).myPlugin("open"); 
     } 
    }, 
    open: function() { 
     ... 
    }, 
    close: function(options, callback) { 

     callback.call($(window)); 
     ... 
    } 
} 
})(jQuery); 

您可以使用此代碼.. 這是調用被作爲參數傳遞的函數(回調)的方式..

+0

感謝您的答覆@Paresh Balar,但我得到的錯誤'遺漏的類型錯誤:無法調用undefined'的方法「呼籲」上在線''callback.call($(window));' – 2012-03-28 05:58:33

+0

嘿檢查這個演示:http://jsfiddle.net/5QZTs/ – 2012-03-28 06:05:11

+0

你基本上是正確的,除了這是處理jQuery的幻燈片動畫。看到我上面的答案。 – 2012-06-21 22:29:49

相關問題