2009-07-20 74 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()方法完成。