我有一个在Ajax调用后动态追加的元素列表。我正在使用一个插件,为动态附加的锚创建一个lightbox click事件。它工作正常,但有时它说标题是未定义的。我意识到这是因为插件在title属性完全附加到DOM之前启动。我知道有几种方法可以做到这一点,但检查所有这些元素是否完全附加的最佳方法是什么?
已经进行了Ajax调用,并使用此函数解析数据(colorbox title是仅针对某些人评估为'undefined'的那个):
function pageImages(images,_q){
for(var i = 0; i < images.count; i++){
$('#pageImages').append('<div class="pageImageItem"><a href="' + images.data[i]._clickurl + '" title= "' + images.data[i]._title + '">\
<img src="' + images.data[i]._thumbnailUrl + '" alt= "' + images.data[i]._title + '"/>\
</a><div class="hoverInfo"><a href="' + images.data[i]._clickurl + '"><h2>' + images.data[i]._title + '</h2><p>' + limitCharacters(images.data[i]._clickurl,40) + '</p></a></div></div>');
}
$(".pageImageItem a").colorbox({maxWidth:'95%', maxHeight:'95%', title: function(){
var url = $(this).attr('href'),
title = $(this).attr('title');
console.log(title);
return '<h2>' + title + '</h2><a href="' + url + '" target="_blank">' + limitCharacters(url,40) + '</a>';
}});
}
这是一张正在发生的事情的图片(突出显示的锚点是明显具有title属性但在灯箱中显示未定义的元素):
答案 0 :(得分:-1)
您可以在没有timevalue的情况下将jQuery元素find块包装在超时中。超时将等待所有进程完成所有javascript。例如:
window.setTimeout(function() {
$(".pageImageItem a").colorbox({maxWidth:'95%', maxHeight:'95%', title: function(){
var url = $(this).attr('href'),
title = $(this).attr('title');
console.log(title);
return '<h2>' + title + '</h2><a href="' + url + '" target="_blank">' + limitCharacters(url,40) + '</a>';
}});
});