2014-10-22 4 views
0

У меня есть две функции. Мне нужно запустить fOne() перед fTwo().Выполнять две функции последовательно с jQuery

function fOne() { 
    if ($('.container').width() < 300) { 
    $('.box').each(function(){ 
      $(this).removeClass('largeSize').addClass('smallSize'); 
    }); 
    } 
} 

function fTwo() { 

    var el = $('.myElement'); 

    $(el).each(function() { 
     var pcntH = el.height(), 
      scorH = el.parent().find('.box').outerHeight(true), 
      pcntT = scorH - pcntH - 5; 

     el.css({'position':'relative', 'top': pcntT + 'px'}).fadeIn('slow'); 
    }); 
} 

Можно ли сделать что-то вроде этого:

fOne().done(fTwo()); 

Это идея, но не работает ...

+4

'FONE(); fTwo(); '? – George

+0

@George is right –

+1

Ни одна из функций не является функцией async, поэтому просто выполните их по порядку. – tymeJV

ответ

0

Просто используйте функцию обратного вызова. В определении

function fOne(callback) { 
    if ($('.container').width() < 300) { 
    $('.box').each(function(){ 
      $(this).removeClass('largeSize').addClass('smallSize'); 
    }); 
    } 
    callback(); 
} 

, а затем сделать вызов fOne(fTwo);. Вы настроены.

0

Если вы не вызывая их асинхронно FONE(); fTwo(); должны работать, иначе fOne(); return fTwo();

0

jQuerys when и done могут использоваться для выполнения операции async, поскольку они используют Deffereds. Функция, которая отправляется в when, будет выполнена, и только после завершения этой функции она вызовет функцию, определенную done.

$.when(fOne()).done(function() { fTwo(); }); 

Вы можете проверить его на api.jquery.com

+2

Измените свой ответ, чтобы добавить объяснение того, как работает ваш код и как он решает проблему OP. Многие плакаты SO являются новичками и не поймут код, который вы опубликовали. –

+0

Должны ли вы вызывать функции там или проходить по ссылке? – Scimonster

+0

@ialarmedalien Хороший звонок. Обновлено. –

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