我想在UI对话框中加载和显示iframe,它将通过点击通过jQuery函数动态生成的元素打开。
这是我的代码
HTML
<div id="eventContent" title="Event" style="display:none;">
<div id="map"></div>
</div>
的jQuery
$('#map').html(event.map);
$('#eventContent').dialog({modal: true});
其中event.map是变量包含HTML字符串,如下所示,并将根据用户点击的元素而改变。
简而言之,除了HTML代码之外,所有内容都是动态生成的数据和HTML。
<iframe src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d9927.782117587185!2d-0.1578822!3d51.5325589!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xc2ee490704162539!2sThe+Hub!5e0!3m2!1sen!2suk!4v1452460618657" width="600" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
但这只是在对话框中显示字符串,我想在其中加载iframe。
答案 0 :(得分:1)
如果没有关于这个项目的更多细节,这就是我的建议。假设:
iframe
工作示例:https://jsfiddle.net/Twisty/9dk8jrqc/
<强> HTML 强>
<div id="eventContent" title="Event">
<div id="map"></div>
</div>
<button id="show">
Show Event
</button>
<强>的jQuery 强>
var event = {
"map": "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d9927.782117587185!2d-0.1578822!3d51.5325589!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xc2ee490704162539!2sThe+Hub!5e0!3m2!1sen!2suk!4v1452460618657"
};
$(function() {
function showMap(url) {
$('#eventContent div#map').html("");
var frame = $("<iframe>", {
width: 600,
height: 450,
frameborder: 0,
allowfullscreen: true
}).css("border", 0);
frame.attr("src", url);
frame.appendTo($("#eventContent div#map"));
$('#eventContent').dialog("open");
}
$('#eventContent').dialog({
autoOpen: false,
modal: true,
width: 640,
height: 480
});
$('#show').click(function() {
showMap(event.map)
});
});
为了使解决方案保持动态,我建议使用一个函数来收集用于iframe
的源代码。如果之前的操作中存在较早的iframe
,则会将其清除。然后,我使用新来源动态创建iframe
,并将其附加到#map
。完成后,我在对话框上打开。
您可以将showMap()
与许多不同的点击事件一起使用,并为其提供您希望在iframe
中显示的任何网址。
我可能还建议存储URL或从链接中获取URL。例如,如果每个事件都有一个指向地图的链接,如:
<a class="mapLink" href="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d9927.782117587185!2d-0.1578822!3d51.5325589!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xc2ee490704162539!2sThe+Hub!5e0!3m2!1sen!2suk!4v1452460618657">Show Map</a>
你可以收集这些信息并像这样使用它:
$(".mapLink").click(function(e){
e.preventDefault();
showMap($(this).attr("href"));
});
这也可以使用data-map-url
作为属性存储在按钮中。
答案 1 :(得分:0)
使用以下代码解决您的问题。
<head>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="http://code.jquery.com/ui/1.11.1/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css" />
</head>
<div id="terms" style="display:none;">
<iframe src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d9927.782117587185!2d-0.1578822!3d51.5325589!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xc2ee490704162539!2sThe+Hub!5e0!3m2!1sen!2suk!4v1452460618657" width="600" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>
<a id="showTerms" href="#">Show Terms & Conditions</a>
<script type="text/javascript">
$(document).ready(function(){
$('#showTerms').click(function(){
jQuery('#terms').dialog({modal:true});
});
});
</script>
答案 2 :(得分:0)
还可以通过jQuery创建临时元素来从iframe HTML字符串中获取src,之后将src分配给iframe。
我的HTML代码
<div id="eventContent" title="Event" style="display:none;">
<div id="map"><iframe src=""></iframe></div>
</div>
jQuery代码
$vars = $('<div>' + event.map + '</div>');
$srcs = $vars.children('iframe').attr('src');
$('#map iframe').attr('src',$srcs);
$('#eventContent').dialog({modal: true});
优化的解决方案,无需在隐藏的div或其他任何内容中生成iframe。 那就是