只有在hide()序列完成后才执行html()(或text())方法

时间:2013-09-12 09:06:59

标签: jquery onclick synchronization show-hide jquery-callback

我遇到了jquery函数的问题,这里是代码:

$(".productUlContainer li.item_thumb").click(function(event){
    event.preventDefault();

    var actual = this;

    //find the 5th element
    thisLi = $(this).index() + 1;
    thisLink = $(this).find(".bridalLink");
    nLi = parseInt(thisLi/5 + 1);
    nLi*=5;
    $(".productUlContainer li:nth-child(5n)").html("");
    $(".productUlContainer li:nth-child("+nLi+")").html( $("#html-results > div").html() );

    //Data set
    var thisLinkTitle = thisLink.attr("title");
    var thisLinkPrice = thisLink.find(".item_price").data("price");
    var thisLinkImgPath = thisLink.find(".promo").attr("src");

    //Manage open/close effect
    if ( previous != actual )
    {       
        $(".productUlContainer li:nth-child("+nLi+")").hide(3000, function(){

            /* Fill big box with clicked product details... */

            $(".productUlContainer li:nth-child("+nLi+")").find($(".itemName")).text( thisLinkTitle );
            $(".productUlContainer li:nth-child("+nLi+")").find($(".price")).text( thisLinkPrice );
            $(".productUlContainer li:nth-child("+nLi+")").find($(".imgCollectionBridal")).attr("src", thisLinkImgPath );

            $(".productUlContainer li:nth-child("+nLi+")").show(3000, function(){
                previous=actual;
            });
        });

    }
    else
    {
        $(".productUlContainer li:nth-child("+nLi+")").hide(3000, function(){
            previous=false;
        });
    }

});

代码结构的一部分非常复杂并且不是由我制作的,最终结果应该与显示放大图像和点击缩略图信息的div相关。 正如您所看到的,该函数会尝试隐藏最终已打开的div,并且它应该使用新单击的缩略图更改其内容。

在我看来,将hide()的这3行INSIDE回调函数放在隐藏序列完成后才会改变内容,但事实并非如此。在运行期间,单击将开始隐藏序列,但是只是立即开始更改,而不是在隐藏完成后...

你能告诉我为什么吗? 谢谢

0 个答案:

没有答案