You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载PHP数据时jQuery animate需点击两次才触发的问题求助

问题根因

你遇到的点击两次才触发动画的问题确实和异步加载逻辑有关。jQuery的load()方法是异步执行的,原有代码中触发load请求后立刻执行高度计算逻辑,此时PHP返回的内容还没渲染到页面中,容器高度计算得到的是空内容的高度,导致第一次点击动画没有实际展开效果,第二次点击时内容已经加载完成,高度计算正常,所以能正常展开。

解决方案

将展开逻辑放到load()的回调函数中,等待数据加载并渲染完成后再执行高度计算和动画即可,修改后的完整代码如下:

$(document).ready(function(){
    $(".orderBlok").click(function(){
        // 可选优化:防止加载中重复点击触发多次请求
        if($(this).data('loading')) return;

        var order = $(this).find('.orderBlokNummer').text();
        var dat = $('#datumSelector').val();
        var open = $(this).find('.orderBlokBonGedeelte'),
            animateTime = 500;

        // 收起逻辑不需要等待异步加载,直接执行
        if(open.height() != 0){
            open.stop().animate({ height: '0' }, animateTime);
            return;
        }

        // 展开逻辑:加载完成后再执行高度计算和动画
        $(this).data('loading', true);
        $('#orderSelector').val(order);
        $("#" + order).load("bonselect.php", {
            dezeOrder: order,
            datumVandaag: dat
        }, function(){
            // 回调函数:服务端返回内容渲染完成后才触发动画
            autoHeightAnimate(open, animateTime);
            $(this).data('loading', false);
        });
    });

    function autoHeightAnimate(element, time){
        var curHeight = element.height(), // 获取当前高度
            autoHeight = element.css('height', 'auto').height(); // 计算内容撑开的自适应高度
        element.height(curHeight); // 重置回当前高度
        element.stop().animate({ height: autoHeight }, time); // 动画过渡到自适应高度
    }
});

原有autoHeightAnimate函数逻辑无需修改,可以正常使用。

内容的提问来源于stack exchange,提问作者ronald1993

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:57:01