2013-02-27 169 views
0

爲什麼oldHeight的值沒有被覆蓋?它仍然有oldHeight80不是我通過的參數。即使我通過參數newHeight,它也不會覆蓋它。但根據documentation,它會自動更新。下面的代碼:jQuery自定義函數

(function($) { 
$.fn.bad = function(callback) { 
    var options; 
    var settings = $.extend({ 
     "oldHeight":"80", 
     "newHeight":"200" 
    }, options); 
    return this.each(function() { 
     var that$ = $(this); 
     that$.bind("mouseenter", function() { 
      $(this).animate({ "height" : settings.newHeight+"px" }); 
     }).bind("mouseleave", function() { 
      $(this).animate({ "height" : settings.oldHeight+"px" }); 
     }); 
    }); 
} 
})(jQuery); 
$(".box").bad({"oldHeight":"400"}); 

這===>Fiddle

+0

這是壓倒一切的,不是嗎?盒子在小提琴上越來越大 – 2013-02-27 10:43:17

+0

嘿,我已經在mouseleave的時候分配了'400',但它被限制爲默認選項。 – 2013-02-27 10:44:18

+0

哎呀,我的壞...誤解了這個問題! – 2013-02-27 10:44:57

回答

1

您初始化「選項」與空與var options;和一個空值擴展您的設置。

(function($) { 
    $.fn.bad = function(options) { 
      var settings = $.extend({ 
       "oldHeight":"80", 
       "newHeight":"200" 
      }, options); 

    ... 

這個工程。

+0

謝謝,我剛開始。我沒有注意到我已經將'callback'作爲參數。只是按照文檔,並感到困惑。我甚至沒有注意到我必須將'callback'變量分配給'$ .extend({})'方法。 – 2013-02-27 10:48:14

1

嘗試的部份,

var settings = {}; 
var settings = $.extend(settings, { 
    "oldHeight":"80", 
    "newHeight":"200" 
}, options); 

你的函數需要接受options不是callback(如果沒有使用回調)。

所以你的代碼會,

(function($) { 
$.fn.bad = function(options) { 
    var settings = {}; 
    var settings = $.extend(settings, { 
     "oldHeight":"80", 
     "newHeight":"200" 
    }, options); 
    ... 

Test

+0

我剛把它命名爲'callback'。但是,命名'選項'不是強制性的。 http://jsfiddle.net/cGSNn/5/ – 2013-02-27 10:52:55

+0

是的,它不是強制性的,但更有意義的語義:) – 2013-02-27 10:54:55

+0

好吧,好的。 +1的努力。 – 2013-02-27 10:55:50