从另一个页面获取 Bootstrap 的模态内容

Posted

技术标签:

【中文标题】从另一个页面获取 Bootstrap 的模态内容【英文标题】:Getting Bootstrap's modal content from another page 【发布时间】:2016-01-02 16:15:25 【问题描述】:

我在名为 menu.html 的页面中有一个锚点,但我无法让 Bootstrap 模式显示来自另一个名为 Lab6.html 的页面的数据。

menu.html

<div class="collapse navbar-collapse navbar-exl-collapse">
  <ul class="nav navbar-nav" id="menu">
    <li><a href="/emplookup.html">Lookup</a></li>
    <li><a href="/modalexample.html">Modals</a></li>
    <li><a href="/Lab6.html#theModal" data-toggle="modal">Lab 6</a></li><!-- this one -->
  </ul>
</div>

Lab6.html

<div class="modal fade text-center" id="theModal">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">X</button>
        <h1>Lab 6</h1>
      </div>
      <div class="modal-body">
        <div class="panel panel-default">
          <div class="panel-heading text-center">
            Employee Information
          </div>
          <div class="panel-body">
            <div class="row">
              <div class="text-right col-xs-2">Title:</div>
              <div class="text-left col-xs-3" id="title"></div>
              <div class="text-right col-xs-2">First:</div>
              <div class="text-left col-xs-3" id="firstname"></div>
            </div>
            <div class="row">
              <div class="text-right col-xs-2">Phone#</div>
              <div class="text-left col-xs-3" id="phone"></div>
              <div class="text-right col-xs-2">Email</div>
              <div class="text-left col-xs-3" id="email"></div>
            </div>
            <div class="row">
              <div class="text-right col-xs-2">Dept:</div>
              <div class="text-left col-xs-3" id="departmentname"></div>
              <div class="text-left col-xs-2">Surname:</div>
              <div class="text-left col-xs-4">
                <input type="text" placeholder="enter last name" id="TextBoxLastName" class="form-control" />
              </div>
            </div>
          </div>
        </div>
        <div class="modal-footer">
          <div class="panel-footer">
            <input type="button" value="Find Employee" id="empbutton" />
            <div class="col-xs-10" id="lblstatus"></div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
<script src="Scripts/jquery-2.1.4.min.js"></script>
<script src="Scripts/bootstrap.min.js"></script>

我做错了什么吗?

【问题讨论】:

陌生人你好!请在jsfiddle.net 中发布整个代码或创建一个演示。谢谢!! 您好,这基本上是所有代码,我在 menu.html 中放置的唯一内容是模态框的锚点。我唯一遗漏的是位于 Lab6.html 的 标记中的 这是 Bootstrap 4 中模态内容的更新:***.com/a/48934494/171456 【参考方案1】:

更新

您尝试从另一个页面获取模态内容的方式不正确。

根据Bootstrap's documentation:

如果提供了远程 URL,内容将通过以下方式加载一次 jQuery 的 load 方法并注入到.modal-content div 中。如果 您正在使用 data-api,您也可以使用 href 属性来指定远程源。显示了一个示例 下面:

<a data-toggle="modal" href="remote.html" data-target="#modal">Click me</a>

因此,首先,您应该将menu.html 文件更改为类似于上面的代码:

<li><a href="Lab6.html" data-target="#theModal" data-toggle="modal">Lab 6</a></li>

然后,您的Lab6.html 页面的一部分必须位于您的menu.html 页面内。例如:

<div class="modal fade text-center" id="theModal">
  <div class="modal-dialog">
    <div class="modal-content">
    </div>
  </div>
</div>

最后,您的LAB6.html 将只有.modal-content 中的代码。例如:

<div class="modal-header">
  <button type="button" class="close" data-dismiss="modal">X</button>
  <h1>Lab 6</h1>
</div>
<div class="modal-body">
  <div class="panel panel-default">
    <div class="panel-heading text-center">
      Employee Information
    </div>
    <div class="panel-body">
      <div class="row">
        <div class="text-right col-xs-2">Title:</div>
        <div class="text-left col-xs-3" id="title"></div>
        <div class="text-right col-xs-2">First:</div>
        <div class="text-left col-xs-3" id="firstname"></div>
      </div>
      <div class="row">
        <div class="text-right col-xs-2">Phone#</div>
        <div class="text-left col-xs-3" id="phone"></div>
        <div class="text-right col-xs-2">Email</div>
        <div class="text-left col-xs-3" id="email"></div>
      </div>
      <div class="row">
        <div class="text-right col-xs-2">Dept:</div>
        <div class="text-left col-xs-3" id="departmentname"></div>
        <div class="text-left col-xs-2">Surname:</div>
        <div class="text-left col-xs-4">
          <input type="text" placeholder="enter last name" id="TextBoxLastName" class="form-control" />
        </div>
      </div>
    </div>
  </div>
  <div class="modal-footer">
    <div class="panel-footer">
      <input type="button" value="Find Employee" id="empbutton" />
      <div class="col-xs-10" id="lblstatus"></div>
    </div>
  </div>
</div>

看看the plnkr I created for you。

【讨论】:

您好,感谢您的回答,但是模态代码位于lab6.html 中。我编辑了我的问题以便更好地澄清。 @Buzinas - 如果 Lab6.html 中有多个模式,我如何访问特定模式? 通过锚标签使用模态的想法根本行不通。 这个解决方案在 Bootstrap 3 上运行良好。但是我无法使用上述过程启动模态。你能告诉如何使用 Bootstrap 4 来实现吗? @ZohaIrshad 检查我的答案【参考方案2】:

请注意,如果您使用的是 Bootstrap 4,则接受的答案不起作用,因为根据 Bootstrap's docs 关于 remote 选项:

此选项自 v3.3.0 起已弃用,并已在 v4 中删除。我们建议改用客户端模板或数据绑定框架,或自己调用 jQuery.load。

如果提供了远程 URL,内容将通过 jQuery 的 load 方法加载一次,并注入到 .modal-content div 中。如果您使用的是 data-api,您也可以使用 href 属性来指定远程源。这方面的一个例子如下所示:

<a data-toggle="modal" href="remote.html" data-target="#modal">Click me</a>

要使其正常工作,请首先从链接中删除 data-targetdata-toggle 属性。您可以将href 属性留在那里。

<li><a href="Lab6.html" class='li-modal'>Lab 6</a></li>

使用jQuery我们可以给&lt;a&gt;元素添加一个点击监听,但是我们不想直接进入href属性所指示的页面,所以我们使用preventDefault()。通过简单地使用jQuery的load方法,我们可以将lab6.html页面的内容加载到modal-content中。

$('.li-modal').on('click', function(e)
      e.preventDefault();
      $('#theModal').modal('show').find('.modal-content').load($(this).attr('href'));
    );

Full example here.

【讨论】:

我在尝试您的解决方案时收到此错误:[Error] TypeError: '$('#theModal').modal('show').find('.modal-content').load ' 未定义)。有什么想法吗?

以上是关于从另一个页面获取 Bootstrap 的模态内容的主要内容,如果未能解决你的问题,请参考以下文章

从另一个组件打开 angular Powered bootstrap 模态

bootstrap 模态框 modal 插件在一个含有多个页面

从另一个模态打开一个模态并关闭第一个(启动)模态

在一个页面触发不同的bootstrap模态框

bootstrap 如何从父页面的表格获取值后传递给模态框的input里面。

bootstrap同一页面上多个模态框