2010-04-14 1 views
1

Я пытаюсь создать простой плагин, как этогоJQuery - Ответная неудача, если нет параметра опции

(function($) { 

     $.fn.gpSlideOut = function(options, callback) { 

      // default options - these are used when no others are specified 
      $.fn.gpSlideOut.defaults = { 
      fadeToColour: "#ffffb3", 
      fadeToColourSpeed: 500, 
      slideUpSpeed: 400 
      }; 

     // build main options before element iteration 
      var o = $.extend({}, $.fn.gpSlideOut.defaults, options); 

      this.each(function() { 
       $(this) 
       .animate({backgroundColor: o.fadeToColour},o.fadeToColourSpeed) 
       .slideUp(o.SlideUpSpeed, function(){ 
        if (typeof callback == 'function') { // make sure the callback is a function 
         callback.call(this); // brings the scope to the callback 
        } 
       }); 

       }); 

      return this; 

     }; 

     // invoke the function we just created passing it the jQuery object 
    })(jQuery); 

Путаница у меня есть, что обычно на плагин JQuery вы можете назвать что-то вроде этого:

$(this_moveable_item).gpSlideOut(function() { 
       // Do stuff 
      }); 

Без параметра опций, но он пропускает обратный вызов, если я делаю это так, поэтому я должен всегда иметь

var options = {} 
$(this_moveable_item).gpSlideOut(options, function() { 
        // Do stuff 
       }); 

Даже если я хочу использовать настройки по умолчанию.

Есть ли способ убедиться, что функция обратного вызова вызвана, есть ли параметр параметров?

Cheers.

ответ

0
//you have no second parameter 
if (callback == undefined) 
    ... 

//have a function 
if ($.isFunction(options)) 
    ... 
+0

спасибо: если (обратный вызов == неопределенная) { \t \t \t \t \t \t если ($ .isFunction (опции)) { \t \t \t \t \t \t \t options.call (это); \t \t \t \t \t \t} \t \t \t \t \t} \t \t \t \t \t еще { \t \t \t \t \t \t если ($ .isFunction (обратный вызов)) { \t \t \t \t \t \t \t \t callback.call (this); \t \t \t \t \t \t} \t \t \t \t \t} – Glo

Смежные вопросы