2010-12-08 15 views
0

関数などで関数名を呼び出すには関数名を変数として渡そうとしますが、呼び出す方法はわかりません。関数のコールバックは変数として渡します。

何か助けてください!

jQuery.fn.makeSlideShow = function(opts) { 

    opts = jQuery.extend({ 
     speed  :400, 
     delay  :0, 
     slideCLass :'.slide', 
     pager  :'#pager', 
     next  :'.nextSlide', 
     previous :'.previousSlide', 
     startSlide :0, 
     screenClick :false, 
     callback:function(){return false;} 
    },opts||{}); 

    // callback the fullscreenImage function here? 

}; 



$('#slideShow').makeSlideShow({ 
    callback : 'fullscreenImage' 
}); 

function fullscreenImage(){ 
    alert('called!'); 
} 

ベスト、ダン。

答えて

1

:これまで

$('#slideShow').makeSlideShow({ 
    callback : 'fullscreenImage' 
}); 

:だからこれを切り替えます。あなたは、その関数を呼び出す必要がある、あなたのプラグインのコード内function reference

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 

を渡す必要があります。これは、いくつかの方法で行うことができます

opts.callback(); // default call 
opts.callback.call(scope, param1, param2, ...); // invoke makeSlideShow with a specific context and arguments 
opts.callback.apply(scope, [param1, param2, ...]); // invoke makeSlideShow with a specific context and arguments as array 
+0

エース - 歓声AND!将来のリファレンスのために、どうすればparamsをmakeSlideShow()経由でコールバックに渡すことができますか? – v3nt

0

文字列を渡す場合、関数が配置されている範囲を知る必要があります。

window[ opts.callback ]() 

または

window[ opts.callback ].call(this) 

これらの関数はグローバルであると仮定します。

文字列の代わりに関数への参照が渡されることをお勧めします。

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 

function fullscreenImage(){ 
    alert('called!'); 
} 

次に、あなたはどうしたら:

opts.callback() 

または

opts.callback.call(this) 
1

をあなたはおそらく、その名前の関数を記述した識別子ではなく、文字列を渡す必要があります。あなたのプラグインに文字列リテラルを渡している

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 
+1

downvotesコメントしてください間違いや細部を省いて修正することができます。明白な理由のない下降音はちょうど愚かです。 – Jakob

0
あなたは次のように 'callbeck' propetyを設定することができ

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 

を、あなたはこのようにそれを呼び出すことができますより:

... 
callback() 
... 
関連する問題