отправить функцию обратного вызова jquery внутри переменной - PullRequest
9 голосов
/ 20 июля 2009

У меня есть эта функция 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;
});

но это не работает

Заранее спасибо за помощь

Ответы [ 5 ]

19 голосов
/ 20 июля 2009

Чтобы передать обратный вызов, переменная должна иметь тип 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);
2 голосов
/ 20 июля 2009

вам нужно вызвать функцию внутри обратного вызова

function example(file, targetwidget, callback){

$(targetwidget).load(file, {limit: 25}, function(){
    callback();
});
1 голос
/ 20 июля 2009

Поскольку вы передаете текстовую строку, вам нужно ее проверить:

function example(file, targetwidget, callback){

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

Edit:

если вы хотите использовать call (), вы должны сделать это так:

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 ().

1 голос
/ 20 июля 2009

хорошо .. Вы делаете это так:

function example(file, targetwidget, callback){

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

Параметры обратного вызова помогут вам отправить данные обратно в функцию обратного вызова. ВНИМАНИЕ, не забудьте ключевое слово this!

1 голос
/ 20 июля 2009

Это должно работать:

$(targetwidget).load(file, {limit: 25}, callback);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...