Bootstrap 模式不适用于版本 4.4.1

Bootstrap Modal does not work with Version 4.4.1

我有一个普通的模态对话框。它使用 Bootstrap 4.1.0 版。 现在我升级到版本 4.4.1,它不再工作了。这是为什么? 我认为这两个版本在模态对话框方面没有区别。

<div class="modal fade" id="1" tabindex="-1" role="dialog" aria-labelledby="modalLabel_1" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <form action="update" method="POST">
                <div class="modal-header">
                    <h5 class="modal-title" id="modalLabel_1">Edit</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">×</span>
                    </button>
                </div>
                <div class="modal-body">
                    Test

                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Schließen</button>
                    <button type="submit" class="btn btn-primary">Speichern</button>
                </div>
            </form>
        </div>
    </div>
</div>

<button type="button" class="btn btn-primary float-right" data-toggle="modal" data-target="#1">
    Open Modal
</button>

在此处查找 Bootstrap 版本:

更新 1:

以下解决方法有效:

    $('button[data-toggle=modal]').click(function(){      
      $(".modal").modal();
    });

这与您的模态 id 是数字有关。如果您将模式的 id 更改为 _1 并将按钮的 data-target 更改为 #_1starts working.


进一步研究这个问题,结果在你的例子中,

document.getElementById('1')

... return 模式,但是

document.querySelector('#1')

...returns 一个错误:

Uncaught DOMException: Failed to execute 'querySelector' on 'Document': '#1' is not a valid selector.

我大胆的猜测是,在内部,Bootstrap 使用 querySelector 将按钮的 data-target 属性传递给它。但是,由于没有显示错误,我猜这一切都发生在 try/catch 块中。不过,我可能是错的,我只是在猜测。


...并且, 正在寻找 even further 问题,结果发现选择器以数字开头 在技术上是有效的,但它们需要进一步处理。也就是说,如果您真的想使用数字 ID,您的 <button>s data-target 属性必须是 data-target="#"data-target="#[=27=]0031"

看到了working.

它甚至 Bootstrap 都不是特定的,这就是 DOM 选择器的工作方式:

# { color: red; }
. { color: blue; }
<span id="1">red</span>
<span class="2">blue</span>


还有一件事(不直接相关):您缺少所需的 popper.js 导入(参见 Quickstart)。弹出窗口、工具提示等是必需的,它们直接放在 <body> 上,但将它们正确定位,就好像它们是被悬停的元素的子元素一样,以便弹出窗口可以溢出带有 overflow: hidden 的父元素。作为一般规则,您希望包含它。