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

Ajax调用中初始化的MixItUp函数仅首次生效的问题求助

问题分析

你的问题核心在于重复初始化MixItUp实例。MixItUp不允许在同一个DOM元素上多次调用mixItUp()方法——第一次初始化后,后续的初始化请求会被插件直接忽略,导致新通过Ajax加载的内容无法被插件识别,自然不会应用Masonry布局和动画效果。

虽然你尝试通过$('body').find('#masonrygallery')定位元素,但这并没有解决重复初始化的本质问题,因为目标元素已经绑定了MixItUp实例,插件会拒绝重复执行初始化逻辑。

解决方案

有两种可靠的解决方式,你可以根据需求选择:

方式一:销毁旧实例后重新初始化

在每次初始化前,先检查目标元素是否已经存在MixItUp实例,如果有则销毁它,再重新初始化:

function searchphotos(force) { 
    // 修正选择器的转义错误:去掉多余的反斜杠
    var photoform = $(".photosearchform").serialize(); 
    $.ajax({ 
        type:'post', 
        url:"includes/photoresults.php", 
        data:({photoform: photoform}), 
        success:function(data){ 
            $("#searchphotos" ).show().empty().append( data ); 
        }, 
        complete:function(){ 
            var $gallery = $('#masonrygallery');
            // 通过插件自动添加的mixitup类判断是否已有实例
            if ($gallery.hasClass('mixitup')) {
                // 销毁旧实例
                $gallery.mixItUp('destroy');
            }
            // 重新初始化MixItUp
            $gallery.mixItUp({ 
                selectors: { 
                    target: '.tile', 
                    filter: '.filter', 
                    sort: '.sort-btn' 
                }, 
                animation: { 
                    animateResizeContainer: false, 
                    effects: 'fade scale' 
                } 
            }); 
        } 
    }); 
}

方式二:使用MixItUp的load方法更新内容(推荐)

MixItUp提供了专门的load方法来动态更新内容,无需重复初始化实例,这是更符合插件设计的用法:

// 页面首次加载时只初始化一次MixItUp
$(document).ready(function() {
    $('#masonrygallery').mixItUp({ 
        selectors: { 
            target: '.tile', 
            filter: '.filter', 
            sort: '.sort-btn' 
        }, 
        animation: { 
            animateResizeContainer: false, 
            effects: 'fade scale' 
        } 
    });
});

function searchphotos(force) { 
    var photoform = $(".photosearchform").serialize(); 
    $.ajax({ 
        type:'post', 
        url:"includes/photoresults.php", 
        data:({photoform: photoform}), 
        success:function(data){ 
            $("#searchphotos").show();
            // 直接用MixItUp的load方法加载新内容,无需重新初始化
            $('#masonrygallery').mixItUp('load', data);
        }
    }); 
}
额外注意点

你代码里的$("\.photosearchform")存在不必要的转义,应该改为$(".photosearchform")——虽然这不是导致你问题的直接原因,但可能会在某些场景下引发选择器失效的问题,建议修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:47:28