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

Django使用Bootstrap5模态框触发Illegal invocation错误如何解决?

报错原因

  • 第一是你的模态框模板结构不符合Bootstrap 5的规范要求:Bootstrap 5 模态框的根元素必须带有modal类,且需要包含modal-dialog、modal-content等标准子结构,你当前使用自定义的modal-container类,导致Bootstrap的选择器引擎找不到预期的DOM元素,抛出非法调用错误。
  • 第二是重复初始化模态框实例:多次触发点击事件加载新的模态框内容时,没有销毁之前已经初始化的模态框实例,旧实例绑定的DOM被替换后,再次调用方法就会出现调用异常。
  • 额外注意:Bootstrap 5 已经移除了对jQuery的强制依赖,虽然兼容jQuery式的$().modal()调用,但混用原生和jQuery接口容易出现兼容问题。

解决方法

1. 修正模态框模板结构

按照Bootstrap 5 官方规范调整模板代码:

<div id="photo-modal" class="modal" tabindex="-1">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-body">
        <p>{{ photo.id }}</p>
      </div>
    </div>
  </div>
</div>

2. 调整JS逻辑,避免重复初始化

修改触发脚本,每次加载新内容前先销毁旧实例,使用Bootstrap原生API初始化模态框:

var modalDiv = $("#modal-div");
$(".open-modal").on("click", function() {
    // 销毁已存在的模态框实例,清空旧内容
    const oldModal = bootstrap.Modal.getInstance('#photo-modal');
    if (oldModal) {
        oldModal.dispose();
    }
    modalDiv.empty();

    $.ajax({
        url: $(this).attr("data-url"),
        success: function(data) {
            modalDiv.html(data);
            // 用Bootstrap原生API初始化并展示模态框
            const newModal = new bootstrap.Modal(document.getElementById('photo-modal'));
            newModal.show();
        }
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:36:04