jQuery - 功能发生得太快或回调过程混乱

时间:2013-04-11 16:36:37

标签: jquery

尝试.slideUp(),使用.html('')清除元素,然后重新填充元素和.slideDown()。简单?是。工作?否。

在完成上滑之前重新填充元素。从本质上讲,你会看到魔术师在幕布到位之前离开,这会破坏节目。

jsFiddle http://jsfiddle.net/Zt6gw/

的jQuery

$('#oh_sort').change(function(){
    $('#oh_list_cont').slideUp(1000);
    $('#oh_list_cont').promise().done(ohReset());
    $('#oh_list_cont').slideDown(1000);
});

function getOpenhouse(){
    var data = $('#oh_sort').val();
    if(data == 'date'){
        $('#oh_list_cont').append('WOOOOOOORK!');
    }
    if(data == 'price'){
        $('#oh_list_cont').append('Please?!');
    }
    if(data == 'city'){
        $('#oh_list_cont').append('OMGWTFBBQ');
    }
}

function ohReset() {
    $('#oh_list_cont').html('');
    getOpenhouse();
}

我用.slideUp()内置的[完整](回调?)函数试过这个,但是没有任何东西填充,第二个幻灯片动画也没有触发。

2 个答案:

答案 0 :(得分:5)

这里您立即调用ohReset()而不是将其作为回调传递:

$('#oh_list_cont').promise().done(ohReset());

应该是:

$('#oh_list_cont').promise().done(ohReset);

答案 1 :(得分:0)

$( '#oh_sort' ).change( function()
{
    $( '#oh_list_cont' ).slideUp( 1000, function()
    {
        $( '#oh_list_cont' ).promise().done( ohReset() );
    } );
    $( '#oh_list_cont' ).slideDown( 1000 );
});

这样的事情?