Jquery 回调函数触发得太早

Jquery 回调函数触发得太早,jquery,callback,delay,Jquery,Callback,Delay,我在jQuery中有一个简单的函数: function detailspage(page) { if (page != checkcurrent) { checkcurrent = page; $('div#details').children("div").slideUp("slow", function() { $('div#details').children("div"+page).slideDown("slow"); });

我在jQuery中有一个简单的函数:

function detailspage(page) {

  if (page != checkcurrent) {

    checkcurrent = page;

    $('div#details').children("div").slideUp("slow", function() {

        $('div#details').children("div"+page).slideDown("slow");

    });

  };

};
我在另一个名为
中放置了三个
,它们都是向上滑动的,默认情况下看不见。现在,我希望在单击每个按钮时,使它们都向下滑动。当然,打开的
必须先向上滑动,然后再向下滑动新的。这就是我在上面尝试这个简单回调函数的原因

页面
变量包含一个
div
的id,如
\info
\cast\u crew

但它不起作用

除了回调函数之外,它还可以工作,而回调函数似乎不会导致任何延迟。回调无效。我只想在当前框的滑动结束时开始新框的向下滑动

怎么了?为什么我的回拨不起作用


谢谢。

我想看看jquery中的promise函数,以确保所有元素都完成了动画:

例如:

function detailspage(page) {
    if (page != checkcurrent) {
        // so we only have to search the dom once
        var details = $('div#details');
        checkcurrent = page;
        details.children("div").slideUp("slow").promise().done(
            function() {
                $('div' + page).slideDown("slow");
            });
    };
};
$.when( $('div#details').children("div").slideUp("slow") ).done(){ function() {
    $('div#details').children("div"+page).slideDown("slow");
});

工作示例:

我尝试了Gary.S接受的答案,但在动画完成之前,我的函数仍在启动。我在另一个帖子上找到了一个建议

需要使用
$.when(func).done(函数(){myFunc();})

我必须把我的函数换成一个新函数

我最终使用的是如下所示(以您的示例为例):


魔术我和OP遇到了同样的问题。回拨没有正常工作。它立即启动,而不是等待
slideUp()
完成。尝试实现
.promise().done()
,就像您的示例和BOOM一样!问题解决了!谢谢:)太好了!!我知道这很老了,但我找了很久才想明白。我有一个很长的帖子,我正准备写的时候它来了。“我可能不是出现此问题的人。尝试了.promise/.done,然后BAM!它工作得很好。感谢您解释为什么按照文档建议将完整函数作为第二个参数传递不起作用?fadeIn上的Cy complete启动了几次。(console.log启动了多达6次)。promise()解决了我的问题