2009-07-20 107 views
9

我有這樣的jQuery的功能發送內部變量

function example(file, targetwidget, callback){ 

    $(targetwidget).load(file, {limit: 25}, function(){ 
     $("#widget_accordion").accordion({fillSpace: true}); 
    }); 
} 

它的工作確定 一個jQuery回調函數,當我做:

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

,但我想送(回調裏面的回調函數)變量 ie:而不是按照$(「#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

你試過callback(); ? – 2009-07-20 12:20:31

+0

我試過了,但問題在於回調是:$(「#widget_accordion」)。accordion({fillSpace:true}); – 2009-07-20 12:42:19

回答

19

要傳遞迴調,變量需要是類型函數。任何這些應該工作:

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); 
2

您需要調用回調函數內的函數

function example(file, targetwidget, callback){ 

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

但是callback = $(「#widget_accordion」)。accordion({fillSpace:true});我會嘗試 – 2009-07-20 12:21:46

+0

你仍然需要通過調用函數() – redsquare 2009-07-20 13:24:07

+0

來調用函數,假設回調確實是一個有效的函數! – redsquare 2009-07-20 13:24:38

1

這應該工作:

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

它不工作,因爲回調裏面的值是文本形式jQuery的觀點 – 2009-07-20 12:49:25

1

以及..你這樣做是這樣的:

function example(file, targetwidget, callback){ 

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

回調的paramenters將幫助您將數據發送回回調函數。注意,不要忘記this關鍵字!

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表達式包裝到一個函數中,它將在函數被調用時運行。調用函數可以使用.call()方法完成。