2011-03-06 93 views
3

我试图找出如何链的定制功能:如何使用.queue()正确链接自定义回调函数?

我有这样的事情:

show_loader(0, function() { 
    open_box($target_open, event.value, '.wide-col', function() { 
     hide_loader(function() { 
      scroll_to_content($target_open, function() { 
      }); 
      $(this).dequeue(); 
     }); 
     $(this).dequeue(); 
    }); 
    $(this).dequeue(); 
}); 

这些功能已经回调实现,看起来是这样的:

function show_loader(position, callback) { 
    $ajaxSpinner.fadeIn(); 
    status = "loading"; //some non-jQuery stuff 
    if (callback) $ajaxSpinner.queue(function() {callback()}); 
} 

你可以看到我想要做的事情的基本概念:在函数内的动画完成后执行我的函数。

我不认为我的代码是完全正确的。顺序应该是:显示加载器,打开框,隐藏加载器,然后滚动到内容。相反,这似乎是我测试它时实际发生的情况:显示加载器,隐藏加载器,滚动到内容,然后打开框。

如何获得正确排队的函数调用顺序?我是否在恰当的上下文中使用了keyowrd“this”?

回答

1

你可以看到我想要做的事情的基本概念:在函数内的动画完成后执行我的函数。

如果您使用jQuery的标准动画功能,您应该可以直接向它们传递回调。例如:

function show_loader(position, callback) { 
    $ajaxSpinner.fadeIn(callback); 
    status = "loading"; //some non-jQuery stuff 
} 

看看http://api.jquery.com,看看它们是如何工作的。

更新:

Here is an example that produces the desired result using queue。我使用了一个更新的表单,其中下一个要执行的函数作为参数传递给回调函数。 也许你做错了dequeue编辑:我试过你的代码,它工作正常。我猜你在其他功能中没有正确使用queue

+0

谢谢谢谢谢谢谢谢! 我花了几个小时阅读关于.queue()包括这里:http://stackoverflow.com/questions/1058158/can-somebody-explain-jquery-queue-to-me/3314877#3314877但没有提供我需要的确切解决方案直到你的答案。 有没有一种方法可以确定某个对象的动作是否完成?这对于在完成操作的事件时调用next()很有用。 – trusktr 2011-03-06 10:25:01

+1

@trusktr:我猜你的意思是你的其他问题? ;) – 2011-03-06 10:40:20

+0

@trusktr:我不会那样做。我假设执行这些函数的顺序应该是固定的,那么为什么要分割它呢?创建一个以正确顺序调用方法的函数。 – 2011-03-06 10:46:55