2012-01-10 6 views
1

Я написал функцию обратного вызова (я считаю, что это называется), как это:Обратный звонок в обратном вызове?

hugeFadeIn(); 

Это простой код, чтобы исчезнуть в какой-то контент, так что я не использовать тот же код снова и снова.

Затем я хотел выполнить некоторый код после hugeFadeIn отделки ... Так что я сделал это:

hugeFadeIn(){ 
    //la la la 
}); 

И это было неправильно, так что я сделал это:

$(hugeFadeIn(){ 
    //la la la 
}); 

И я м по-прежнему возникают ошибки. Что я делаю не так? Спасибо всем :)

Редактировать В соответствии с просьбой, тело hugeFadeIn функции:

function hugeFadeIn() { 
    $("#huge-loader").fadeIn("fast"); 
} 
+0

Почему бы вам просто не поместить две функции один за другим? Или это огромныйFadeIn(), используемый только как функция обратного вызова? –

+0

Можете ли вы опубликовать тело функции largeFadeIn()? – fcalderan

ответ

2

Если вы хотите запустить некоторые вещь после hugeFadeIn отделки, вам нужно передать свой обратный вызов в.

function hugeFadeIn(after) { 
    // whatever 
    after(); 
} 

(Если hugeFadeIn делает перепыла себя и не полагаться на то, что называя сам принимает функцию обратного вызова.)

Edit после OP редактировать.

function hugeFadeIn(after) { 
    $("#huge-loader").fadeIn("fast", after); 
} 
+0

Спасибо Дэйв, что означает 'after'? Это реально или просто используется в качестве примера? – pufAmuf

+0

@pufAmuf Это имя параметра функции, как и любое объявление функции. –

+0

[см. Документацию для fadeIn] (http://api.jquery.com/fadeIn/). Если вы хотите запустить функцию 'myFunc' после окончания затухания, вы должны передать эту функцию в качестве второго аргумента в' fadeIn (...) ':' $ ("# огромный-loader"). FadeIn ("fast ", myFunc)'. Самый простой способ сделать это - объявить параметр в 'largeFadeIn', как это сделано в сообщении выше, а затем вызвать' огромныйFadeIn (myFunc); ' – akoptsov

1

близко ...

hugeFadeIn(function() { 

    alert('My callback is running'); 

}); 

Тогда в hugeFadeIn()

hugeFadeIn = function(fn) { 

    fn(); 

} 
+0

Привет Сет, спасибо за ответ! Могу ли я спросить, что этот код внутри 'vastFadeIn' (второй)? – pufAmuf

+0

Я не понимаю задание 'greatFadeIn'. –

+0

Является ли это нацеленным на меня? Причина заключалась в том, что я использовал один код, который можно было бы легко использовать повсюду и менять без необходимости менять все по одному. – pufAmuf

1

function hugeFadeIn(time, callback) { 
    $('.something').fadeIn(time, callback); 
} 

Итак

hugeFadeIn(500, doAjaxWhathever); 

или что-то подобное для асинхронного

$.HugeFade = function(item, time, callback) { $(item).fadeIn(time); callback();} 
$.HugeFade('#myDiv', 1500, myCallback); 

Но если вы» повторное использование hugeFadeIn в качестве обратного вызова, вы не можете сделать это

$('#myDiv').load(url, hugeFadeIn(500, callback2)); //wrong 
// it should be.. 
$('#myDiv').load(url, function(){hugeFadeIn(500, callback2)}); 
+0

Не совсем; 'fadeIn' является асинхронным. –

+0

правая, фиксированная ... –

1

, если вам нужно что-то делать с тем же элементом просто положить вызов второго метода после первого одного

hugeFadeIn(); 
someOtherMethodCall(); 

Если вам нужно для работы с другим элементом на странице, и вам нужно принудительно вызвать второй метод после первого завершения метода - использовать метод задержки (http: //api.jquery.ком/задержка /)

hugeFadeIn(); 
someOtherMethodCall(); 

someOtherMethodCall(time){ 
    $('#some-id').delay(time).hide(); 
} 
+0

Почему бы не использовать встроенные средства jQuery? –

1

, когда я пишу функцию, я обычно ставлю параметр для обратного вызова:

function myFunction(param1, callback_param){ 

    alert(param1); // do stuff here 

    if(typeof(callback_param) == "function"){ 

     callback_param(); 

    } 
} 

и вот как я называю это.

myFunction('Hello World', function(){ 
    alert('Yes!, this is the World, how can i help you?'); 
}); 

надеюсь, что это будет способствовать. спасибо

Смежные вопросы