从另一个页面获取 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-target
和 data-toggle
属性。您可以将href
属性留在那里。
<li><a href="Lab6.html" class='li-modal'>Lab 6</a></li>
使用jQuery我们可以给<a>
元素添加一个点击监听,但是我们不想直接进入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 插件在一个含有多个页面