2011-04-11 63 views
1

嘿帥哥,我有以下功能:創作插件功能使用jQuery

$.fn.slideOut = function(speed,dir) { 
     this.animate({ 
      dir: '-1000px' 
     }, speed); 
    }; 

但方向(dir)未結轉,不給我一個錯誤要麼。

我打電話它像這樣: $('#element').slideOut(500,'top');

所以我quesiton =它爲什麼動畫? 。:(

回答

4

如果你想使用一個變量屬性名,你不能使用對象文本,則必須首先創建對象,然後設置屬性與「數組訪問」語法:

$.fn.slideOut = function(speed,dir) { 
    var options = {}; 
    options[dir] = '-1000px'; 
    this.animate(options, speed); 
}; 
+0

完美,謝謝你 - 這使得有很大的意義實際上+1爲你 - 將在11分鐘內接受:D – 2011-04-11 14:22:21

+0

@Neurofluxation:最好接受TJ的答案;) – 2011-04-11 14:25:40

+0

哦,我不知道,你比我完整的11秒。 ;-) – 2011-04-11 14:26:36

0

你在你的插件都呼籲

this.animate({ 
    dir: '-1000px' 
} 

,這是正常的,它不使用一個接收作爲參數。

+1

所以你確認他的代碼不起作用,但不要不提供解決方案? – 2011-04-11 14:23:54

+0

乾杯的確認,但我已經知道>。< – 2011-04-11 16:16:47

5

不能在左側使用一個變量(名稱)側一個東西 字面屬性初始值設定項,您在那裏實際上是屬性名稱「dir」。你必須這樣做:

$.fn.slideOut = function(speed,dir) { 
    var opts = {}; 
    opts[dir] = '-1000px'; 
    this.animate(opts, speed); 
}; 

有點偏離主題,但可能值得指出的是,插件功能不會鏈。除非你有一個很好的理由不爲chainability返回this(在這種情況下,你可以只返回什麼animate回報,因爲animate回報this):

$.fn.slideOut = function(speed,dir) { 
    var opts = {}; 
    opts[dir] = '-1000px'; 
    return this.animate(opts, speed); 
}; 
+0

+1鏈接。 – 2011-04-11 14:24:58