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

Yii2 GridView中Bootstrap模态框重复点击href内容不更新问题解决

Yii2 GridView模态框重复加载首次内容的解决方法

问题根源

Bootstrap模态框默认会缓存远程加载的内容,第一次请求后,后续触发时不会重新发起新请求,直接复用首次加载的内容,这就是你遇到后续点击始终加载首次内容的原因。

具体解决方案

方案1:关闭模态框时清空内容并清除缓存

给模态框绑定关闭事件,每次关闭时清空内容并移除缓存关联,确保下次打开时重新加载新内容:

// 替换成你的模态框实际ID
$('#modal').on('hidden.bs.modal', function () {
    $(this).removeData('bs.modal'); // 清除模态框的缓存数据
    $(this).find('.modal-content').empty(); // 清空模态框内的内容
});

// 绑定所有触发按钮的点击事件
$('.modal-btn').on('click', function(e) {
    e.preventDefault();
    var targetUrl = $(this).attr('href');
    // 打开模态框并加载对应URL的内容
    $('#modal').modal('show').find('.modal-content').load(targetUrl);
});

需要在GridView的按钮配置里给所有触发模态框的按钮加上统一类名modal-btn,示例:

[
    'class' => 'yii\grid\ActionColumn',
    'buttons' => [
        'view' => function ($url) {
            return Html::a('查看', $url, [
                'class' => 'modal-btn',
                'title' => '查看详情'
            ]);
        },
        'edit' => function ($url) {
            return Html::a('编辑', $url, [
                'class' => 'modal-btn',
                'title' => '编辑内容'
            ]);
        }
    ]
]

方案2:直接禁用模态框的缓存机制

如果你使用的是Bootstrap 3,可以在初始化模态框时禁用缓存,不过这种方式兼容性不如方案1稳定:

$('#modal').modal({
    cache: false
});

配合按钮的点击事件,确保每次都加载最新的URL内容。

排查误区提醒

不要直接移除项目中的JS库,Yii2核心依赖jQuery和Bootstrap JS,删除后必然导致页面功能异常。排查问题时应该通过注释部分自定义JS代码来定位问题,而不是删除依赖库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:35:13