.map-find元素一旦通过AJAX加载
.map find elements once loaded via AJAX
我有以下函数getItemID
,它查找某个父ID (#search-output)
下的所有ID。如果ID (#test)
是在页面加载时加载的,则getItemID
会找到没有问题的ID。
然而,我实际上是通过AJAX实时构建这些ID的(#test)
,所以我的函数getItemID
需要能够找到通过AJAX加载的这些ID的(#test)
。
我认为这里的问题是getItemID
中的.map(function(){})
在加载页面后找不到添加到DOM中的元素。我需要一种方法让这个.map
找到所有元素,而不管它们是何时加载的。
这是有效的:HTML:
<div id="search-output">
<div id="test"></div>
</div>
这不起作用:HTML:
<div id="search-output">
</div>
JavaScript getItemID函数:
function getItemID(){
var ID = $('#search-output [id]').map(function(){
return this.id;
}).get();
if(ID.length == 0){
return null;
}else{
return ID;
}
}
JavaScript AJAX,返回HTML:
$.ajax({
url:'lib/search-server.php',
type:'POST',
data: {
search: "*"
},
dataType:'json',
success: function(data){
/* data[0] contains "<div id="test"></div>" */
$('#search-output').append(data[0]);
}
});
这里的一个可能问题是,在ajax请求完成之前调用getItemID
,现在search-output
没有任何子级,所以该方法找不到任何要返回的元素id。
因此,解决方案是在ajax调用完成并更新dom之后调用getItemID
方法。
$.ajax({
url: 'lib/search-server.php',
type: 'POST',
data: {
search: "*"
},
dataType: 'json',
success: function (data) {
/* data[0] contains "<div id="test"></div>" */
$('#search-output').append(data[0]);
//now call the method
var ID = getItemID();
//do other stuff
}
});
尝试使用deferred.done(doneCallbacks[,doneCallacks])
当Deferred已解决。
$.ajax({
url:'lib/search-server.php',
type:'POST',
data: {
search: "*"
},
dataType:'json'
})
.done([function(data){
/* data[0] contains <div id="test"></div> */
$('#search-output').append(data[0]);
}, getItemID]
});
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- 获取ajax加载的图像的大小
- 分页:如何用AJAX加载第一个页面
- 页面加载之前的jQuery Ajax加载程序
- ajax加载了内容,脚本没有执行
- 如何使用post和ajax加载视图Codeigniter
- $(select).selectmenu('打开')不'如果使用ajax加载页面,则不起作用
- ajax加载()后,包含图表的图像不会重新绘制
- 如果数据为空,Ajax加载不会停止
- 防止用户在jQuery Mobile中ajax加载页面时单击其他位置
- 将内容ajax加载到html弹出窗口中
- 导航栏和AJAX加载
- 用于各个元素的Ajax加载程序
- 通过AJAX加载页面并执行javascript和CSS
- 使用ajax加载页面的一部分
- 从表单中动态生成一个字符串,传递给通过AJAX加载的PHP文件
- 显示全屏Ajax加载程序的最佳方式
- 获取通过AJAX加载的元素
- 如何在rails应用程序中测试AJAX加载的内容
- 如何在Ajax加载新内容时停止JavaScript执行