【发布时间】:2017-05-31 17:51:47
【问题描述】:
我有一个简单的图片搜索页面查询 Flikr API 并显示 4 个结果作为弹出模式的链接。我的 JS 代码将相关的 img src 插入到正确的 div 和数据属性中,以创建模式/弹出框。我知道渲染的代码是正确的,因为我可以将渲染代码的输出从 DOM 复制/粘贴到另一个 html 文件中并打开它,它可以正常工作。
我正在尝试找出一种绑定数据属性的方法,以便 jQuery 知道这些动态创建的元素是弹出窗口。
加载时的 HTML
<form action="#" method="post">
<label for="search">Enter Search Tag</label>
<input type="text" id="search" name="search_tag"/>
<input type="button" id="submit_tag" value="Submit"/>
</form>
<div id="images">
<div id="thePopups">
</div>
</div>
JS
$('#submit_tag').on("click ",function(){
// grabs the values of the search box and checkbox
var tag = document.getElementById("search").value;
// $('#images').empty();
console.log('start api');
searchAPI(tag);
console.log('api finished');
function searchAPI(tag){
var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
$.getJSON( flickerAPI, {
tags: tag,
tagmode: "any",
format: "json"
})
.done(function( data ) {
$.each( data.items, function( i, item ) {
$( "<img>" ).attr( "src", item.media.m ).appendTo( "#thePopups" );
console.log('img'+i+' created');
$( "img:eq("+i+")").wrap( "<div data-role='popup' id='photo"+i+"'></div>");
console.log('image '+i+' wrapped in popup '+i+'');
$( "<a>" ).attr({
'data-rel':'popup',
href: "#photo"+i
}).text( " Open Modal "+i )
.appendTo( "#images");
console.log('modal'+i+' created');
if ( i === 3 ) {
return false;
}
});
});
}
})
动态生成并插入。
<div id="images">
<div id="thePopups">
<div data-role="popup" id="photo0"><img src="http://farm5.staticflickr.com/....../.jpg"></div>
<div data-role="popup" id="photo1"><img src="http://farm5.staticflickr.com/....../.jpg"></div>
<div data-role="popup" id="photo2"><img src="http://farm5.staticflickr.com/....../.jpg"></div>
<div data-role="popup" id="photo3"><img src="http://farm5.staticflickr.com/....../.jpg"></div>
</div>
<a data-rel="popup" href="#photo0">Open Modal 0</a>
<a data-rel="popup" href="#photo1">Open Modal 1</a>
<a data-rel="popup" href="#photo2">Open Modal 2</a>
<a data-rel="popup" href="#photo3">Open Modal 3</a>
</div>
但我无法让它显示并作为弹出窗口工作。它显示带有无法打开的链接的图像。
【问题讨论】:
-
不添加弹窗,只使用一个静态弹窗作为容器并动态设置img源:
$('#photo img').attr('src', 'http://farm5.staticflickr.com/...'); -
但是我的链接将如何对应 saiD 弹出窗口?我应该把ID和img标签放在一起吗?
-
我刚刚添加了一个如何动态链接图像 src 的示例。
-
由于这些元素是动态创建的,您必须使用事件委托将事件附加到它们
标签: javascript jquery jquery-mobile