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

如何重新打开Semantic UI模态框?解决关闭后无法再次显示问题

解决Semantic UI模态框关闭后无法再次显示且被移出原DOM位置的问题

这个问题我之前也踩过坑!Semantic UI的模态框组件默认会将模态框元素从原DOM位置移动到页面的.ui.dimmer.modals.page容器中,目的是统一管理模态框的层级和显示逻辑,但这就导致你第二次点击卡片时,$(this).children('.ui.modal')找不到目标元素了——因为它已经不在卡片的子节点里了。

最直接的解决方案:禁用模态框的自动移动行为

Semantic UI提供了detachable配置项,设置为false就能阻止模态框被移出原DOM位置。只需要修改你的JS代码,在模态框的配置里加上这个属性:

$('.card').click(function() {
  $(this).children('.ui.modal').modal({ 
    blurring: true,
    detachable: false // 核心配置:禁止模态框被移动到dimmer容器
  }).modal('show');
});

加上这个配置后,模态框会始终保留在卡片的子元素位置,无论打开关闭多少次,你通过$(this).children('.ui.modal')都能正确找到它,再次点击卡片就能正常显示模态框了。

备选方案:通过唯一ID绑定模态框(适合复杂场景)

如果你的页面结构更复杂,或者担心依赖DOM层级会出问题,可以给每个模态框设置唯一ID,同时给对应卡片添加data-*属性关联ID,通过ID来调用模态框:

修改后的HTML:

<div class="ui three stackable cards">
  <div class="card" data-modal-id="modal-tfplus">
    <div class="image">
      <img src="/Assets/img/products/tfplus.jpg">
    </div>
    <div class="content">
      <div class="header">4Life Transfer Factor Plus</div>
    </div>
    <div class="ui modal" id="modal-tfplus">
      <i class="close icon"></i>
      <div class="header">4Life Transfer Factor Plus</div>
      <div class="image content">
        <div class="ui medium image">
          <img src="/Assets/img/products/tfplus.jpg">
        </div>
        <div class="description">
          <div class="ui header">Ingrediente:</div>
          <ul>
            <li>Zinc</li>
            <li>Colostru bovin</li>
            <li>Galbenus de ou</li>
            <li>Cordyvant: complex de polizaharide cu o proprietate exclusiva - IP6 (acid fitic)</li>
            <li>Extract de boabe de soia</li>
            <li>Cordyceps sinensis</li>
            <li>Beta-glucani</li>
            <li>Extract de Agaricus blazeii</li>
            <li>Extract de pulbere de Aloe Vera</li>
            <li>Frunze de maslin</li>
            <li>Ciupercile Maitake si Shiitake</li>
            <li>Pulbere de coaja de lamaie</li>
          </ul>
        </div>
      </div>
    </div>
  </div>
  <div class="card" data-modal-id="modal-tri-factor">
    <div class="image">
      <img src="/Assets/img/products/tri-factor.jpg">
    </div>
    <div class="content">
      <div class="header">4Life Transfer Factor</div>
    </div>
    <div class="ui modal" id="modal-tri-factor">
      <i class="close icon"></i>
      <div class="header">4Life Transfer Factor</div>
      <div class="image content">
        <div class="ui medium image">
          <img src="/Assets/img/products/tri-factor.jpg">
        </div>
        <div class="description">
          <div class="ui header">Ingrediente:</div>
          <ul>
            <li>Colostru bovin (300 mg in fiecare capsula)</li>
            <li>Galbenus de ou</li>
          </ul>
        </div>
      </div>
    </div>
  </div>
</div>

对应的JS:

$('.card').click(function() {
  const targetModalId = $(this).data('modal-id');
  $(`#${targetModalId}`).modal({ 
    blurring: true
  }).modal('show');
});

这种方法完全脱离了DOM层级的依赖,即使模态框被移动(默认行为),也能通过ID精准找到目标元素,适合需要更灵活控制的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:10:23