2012-03-04 126 views
0

我已經做了一個小的函數,我將在應用程序中重複使用幾次。這似乎是我寫的語法錯誤,因爲我的控制檯顯示一個錯誤「對象[對象對象]沒有方法'fadeIt'jQuery將對象從一個函數傳遞到另一個函數

所以我想這個問題是傳遞一個函數的對象到另一個..不是知道如何做到這一點優雅。我的代碼如下。

感謝您的幫助!

http://jsfiddle.net/danielredwood/aFx6u/2/

function fadeIt() { 
    $(this).animate({ 
     opacity:0 
    }, 400, function(){ 
     //$(this).css('cursor','auto'); 
     //$(this).children('img').css('margin-left','-100px'); 
    }); 
} 

$('.box').click(function(){ 
    $(this).fadeIt(); 
}): 
+2

爲什麼不直接使用jQuery的'淡出()'函數? – rjz 2012-03-04 01:51:34

+0

這將幫助你解決它:http://docs.jquery.com/Plugins/Authoring – nnnnnn 2012-03-04 01:53:16

+0

@rjz - 將結合一些其他的好東西,評論是。 – technopeasant 2012-03-04 01:56:32

回答

2

你可能想使這個成爲一個插件,並使用以下方法:

$ .fn.fadeIt =函數(){

};然後你可以使用$(this).fadeIt();這樣你就可以使用$(this).fadeIt();

0

此修復您的代碼。

function fadeIt(element) { 
    element.animate({ 
     opacity:0 
    }, 400, function() { 
     // element.css('cursor','auto'); 
     // element.children('img').css('margin-left','-100px'); 
    }); 
} 

$('.box').click(function() { 
    fadeIt($(this)); 
}): 

但是,我強烈推薦使用jQuery的內置函數,如fadeOutfadeIn

+0

插件或現有功能最終會更好,但是這直接回答了問題。一些解釋,而不是僅僅是代碼更好的答案,但我想知道誰downvoted它和爲什麼。 – 2012-03-04 01:55:37

+0

@GregPettit,我同意並相應地編輯它。 – Sparky 2012-03-04 01:58:45

1

您可以通過使用.call(),這樣設置fadeIt函數的調用上下文...

fadeIt.call(this) 

說明:

JavaScript有兩種方法,.call().apply()這兩個都可以讓你手動設置值this在函數喲你在調用的時候調用。

.call().apply()方法可用於所有JavaScript函數。

該方法的第一個參數是您要在調用的函數中爲this設置的值。兩者之間的唯一區別是參數如何傳遞。


隨着.call(),參數分別傳遞,就像...

func.call(thisArg, 'foo', 'bar') 

隨着.apply()參數都爲一個數組類集合過去了......

func.apply(thisArg, ['foo', 'bar']) 

。 ..將在被調用的函數中被解構爲單獨的參數。

+1

整潔。我不認爲我知道這件事,如果我做了,我就忘記了。 – 2012-03-04 01:56:48

+0

@GregPettit:是的,它有時非常方便。 – 2012-03-04 02:08:02

0

你要做的是使用點符號來調用一個函數,它在JavaScript中僅限於對象的原型。你想要做的是改變它,所以你通過this在fadeIt

參數
function fadeIt(obj) { 
... 
} 

然後調用fadeIt($(this));

相關問題