2009-07-20 4 views
9

私はこのjquery関数を持っています。変数の中にjqueryコールバック関数を送る

 function example(file, targetwidget, callback){ 

    $(targetwidget).load(file, {limit: 25}, function(){ 
     $("#widget_accordion").accordion({fillSpace: true}); 
    }); 
} 
 example('http://example.com/', "#divid", callback); 

しかしコールバック関数をコールバック変数 の内部に送りたいとします。 ( "#widget_accordion")。accordion({fillSpace:true});私はそれを送信したいコールバック関数内で:

 example('http://example.com/', "#divid", '$("#widget_accordion").accordion({fillSpace: true});'); 

関数は次のようなものでなければなりません:

function example(file, targetwidget, callback){ 

$(targetwidget).load(file, {limit: 25}, function(){ 
    callback; 
}); 

+0

コールバックを試しましたか? ? –

+0

私はそれを試しましたが、問題はそのコールバックが次のとおりです:$( "#widget_accordion")。accordion({fillSpace:true}); –

答えて

19

コールバックを渡すには、変数の型がfunctionである必要があります。これらのいずれかが動作するはずです:

function example(file, targetwidget, callback) { 
    $(targetwidget).load(file, {limit:25}, callback); 
} 

// Call it by providing the function parameter via inline anonymous function: 
example('http://example.com/', "#divid", function() { 
    $("#widget_accordion").accordion({fillSpace: true}); 
}); 

// Or, declare a function variable and pass that in: 
var widgetCallback = function() { 
    $("#widget_accordion").accordion({fillSpace: true}); 
}; 

example('http://example.com/', "#divid", widgetCallback); 

// Or, declare the function normally and pass that in: 
function widgetCallback() { 
    $("#widget_accordion").accordion({fillSpace: true}); 
} 

example('http://example.com/', "#divid", widgetCallback); 
+0

定義されていませんが、これにも検証を追加することがあります、私はjqueryの$ .isFunction()( http://api.jquery.com/jQuery.isFunction/) – Eman

2
を事前に

おかげで働いていません

コールバック内の関数を呼び出す必要があります

function example(file, targetwidget, callback){ 

$(targetwidget).load(file, {limit: 25}, function(){ 
    callback(); 
}); 
+0

ただし、コールバック= $( "#widget_accordion")。accordion({fillSpace:true});私はそれを試してみる –

+0

コールバックが本当に有効な関数であると仮定して、まだ() – redsquare

+0

と呼んでこの関数を呼び出す必要があります! – redsquare

1

これは動作するはずです:

$(targetwidget).load(file, {limit: 25}, callback); 
+0

コールバック内の値がテキスト形式のjqueryの観点 –

1

をうまく..あなたがこの方法を実行します。コールバックの

function example(file, targetwidget, callback){ 

$(targetwidget).load(file, {limit: 25}, function(){ 
    if(typeof(callback)==='function'){ 
    callback.call(this, 'other parameters'); 
    } 
}); 

paramentersはあなたがコールバック関数に戻ってデータを送信するのに役立ちます。注意、thisのキーワードを忘れないでください!

+0

ここでエラーが発生します:callback.callは関数ではありません –

+0

...コールバックは実際に関数ではないようです:) –

1

あなたがそれをevalに必要となるテキスト文字列を渡しているので:

function example(file, targetwidget, callback){ 

    $(targetwidget).load(file, {limit: 25}, function(){ 
     eval(callback); 
    }); 

編集:

あなたが呼び出しを(使用する場合)あなたはこのようにそれをしなければならないでしょう。

function callback() { 
    $("#widget_accordion").accordion({fillSpace: true}); 
} 

function example(file, targetwidget, callback){ 

    $(targetwidget).load(file, {limit: 25}, function(){ 
     if(typeof(callback)==='function'){ 
      callback.call(this); 
     } 
    }); 

example('http://example.com/', "#divid", callback); 

呼び出しを処理するには、関数ではなく文字列を渡す必要があります。しかし、関数の中にjQuery式をラップすることによって、関数が呼び出されたときにjQuery式が実行されます。関数の呼び出しは、.call()メソッドを使って行うことができます。

+1

3分前 googletorp 666●10 - >私たちは皆、evalが悪であることを知っています! – peirix

+0

それは動作しますが、それを行うためのよりよい方法はありますか? –

+0

ええ、私のコメントhttp://stackoverflow.com/questions/1153241/send-a-jquery-callback-function-inside-a-variable/1153272#1153272を読んでください。ちょうどeval()の代わりにcall()を使用して –

関連する問題