了解 data-dismiss 属性在 Bootstrap 中的工作原理

Posted

技术标签:

【中文标题】了解 data-dismiss 属性在 Bootstrap 中的工作原理【英文标题】:Understanding how data-dismiss attribute works in Bootstrap 【发布时间】:2016-04-10 04:44:50 【问题描述】:

我是 Bootstrap 的新手,我遇到了这个例子的问题:

<!-- Trigger the modal with a button -->
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>

<!-- Modal -->
<div id="myModal" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title">Modal Header</h4>
      </div>
      <div class="modal-body">
        <p>Some text in the modal.</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
      </div>
    </div>

  </div>
</div>

根据我的理解data-dismiss="modal" 属性应该在您单击它时关闭模式,但我不明白它在幕后是如何工作的。我查看了官方文档:http://getbootstrap.com/javascript/#modals-examples,但没有任何解释。

【问题讨论】:

我认为 $("#myModal").modal('hide');正在幕后发生。不完全确定 【参考方案1】:

隐藏功能在modal.js中就是这样实现的。

this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))

基本上它只是找到具有data-dismiss 属性和modal 值的元素。点击后会隐藏这些元素。

【讨论】:

您能解释一下 Bootstrap 如何检测 html 页面上的 data-dismiss="modal" 属性吗?为什么 Bootstrap 会触发您提到的代码?对于非常基本的问题,我很抱歉,我对框架完全陌生。 @Adeel 你能详细说明一下吗?如果代码搜索属性为data-dismiss 且值为modal 的DOM 元素,它将找到我的按钮。它如何确定隐藏哪个 DOM 节点? data-dismiss = modal 是否会在关闭时删除模态体内的数据?【参考方案2】:

data-dismiss="modal"替换为:onclick="$('#modal_id').modal('hide');"

你应该有这样的东西:

<button type="button" class="close" onclick="$('#modal_id').modal('hide');" aria-label="Close">

onclick="$('#modal_id').modal('hide');" 将仅关闭它所在的特定模式。

请注意这个答案是否有用。

【讨论】:

【参考方案3】:

如果您在一个页面上使用多个模态,同时打开一个页面,使用data-dismiss="modal" 关闭最上面的页面将隐藏所有活动的模态。

【讨论】:

那么如何防止隐藏所有其他模式【参考方案4】:

正好在bootstrap.js中找到属性为data-dismiss="modal"的元素,并在后面触发this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))。即它隐藏了元素,但方式更复杂。

【讨论】:

这并不能真正解释引导程序如何识别哪个对象是模态的.. @naught101 你应该只显示一个模态,不建议同时显示多个模态,改用“卡片”类。

以上是关于了解 data-dismiss 属性在 Bootstrap 中的工作原理的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Bootstrap data-dismiss 和 modal('hide') 不起作用?

data-dismiss="modal"

Bootstrap 显示多个模态框(modal)

luogu4269 Snow Boots G (并查集)

[USACO18FEB]Snow Boots S

Cheap Canvas Tactical boots and Shoe@ Footwear