2012-03-04 18 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

を呼び出し、それを変更するのですか? – rjz

+0

これは、あなたがそれを並べ替えるのに役立ちます:http://docs.jquery.com/Plugins/Authoring – nnnnnn

+0

@rjz - コメントがあるところに他の良いものを組み合わせようとしています。 – technopeasant

答えて

2

$ .fn.fadeIt =関数(){

を};

$(this).fadeIt();を使用できます。あなたはこのように、.call()を使用して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)); 
}): 

しかし、代わりにfadeOutfadeInのようなjQueryの組み込み関数を使用することを強くお勧めします。あなたは、おそらくプラグインにこれ​​を作成し、次のようなアプローチを使用したい

+0

プラグインまたは既存の関数は最終的には優れていますが、これは直接質問に答えます。回答には単なるコードの代わりに説明がありますが、誰がそれをなぜ否定したのか、その理由を知りたいと思います。 –

+0

@GregPettit、私はこれに同意してそれを編集しました。 – Sparky

1

...

fadeIt.call(this) 

説明:

JavaScriptが持っている二つの方法、.call().apply()は、両方とも手動でthisの値を関数yoに手動で設定できるようにしました呼び出し時に呼び出されます。

.call()および.apply()のメソッドは、この目的のためにすべてのJavaScript関数で使用できます。

最初の引数は、呼び出す関数のthisに設定する値です。両者の唯一の違いは、引数がどのように渡されるかです。 .call()


、引数は...のように、個別に.apply()

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

を渡される引数は、アレイのようなコレクションとして渡され...

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

。 ..呼び出される関数の中で個々の引数として破壊されます。

+1

ニート。私はこれについて知っているとは思わないし、もし私がそれを忘れた場合、私はそれを忘れてしまった。 –

+0

@GregPettit:はい、時にはとても便利です。 –

0

あなたがしようとしているのは、ドット表記法を使用して関数を呼び出すことです.Javascriptではオブジェクトのプロトタイプのみに制限されています。何がやりたいことは、あなたがfadeIt

function fadeIt(obj) { 
... 
} 

で引数としてthisを渡すように、ちょうどjQueryの `フェードアウト()`関数を使用しない理由fadeIt($(this));

関連する問題