2014-09-08 3 views
0

У меня есть список элементов, которые динамически добавляются после вызова Ajax. Я использую плагин, который создает событие щелчка лайтбокса для динамически добавленных якорей. Он отлично работает, но иногда он говорит, что заголовок не определен. Я понимаю, что это связано с тем, что плагин запускается до того, как атрибут title полностью добавлен в DOM. Я знаю несколько способов сделать это, но каков наилучший способ проверить, что все эти элементы полностью добавлены?JQuery Javascript лучший способ проверить элементы, добавленные

Ajax вызов уже сделан и данные проанализированы с помощью этой функции (название Colorbox является тот, который имеет значение «неопределенные» только для некоторых):

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, но показывает неопределенный в лайтбокс): enter image description here

+3

* «Я понимаю, что это связано с тем, что плагин инициируется до того, как атрибут title полностью добавлен в DOM». * Нет, это не так. Элемент полностью добавляется к DOM перед возвратом вашего вызова '.append'. Проблема кроется в другом месте. С кодом, который вы указали, '$ (this) .attr ('title');' никогда не вернет 'undefined'. Он может возвращать '' '', хотя, если какой-либо из свойств 'images.data [i] ._ title'' '' ''. И он может возвращать '' undefined ''(обратите внимание на кавычки), если какой-либо из свойств' images.data [i] ._ title' 'undefined' (или отсутствует в' images.data [i] 'целиком). –

+0

Я не уверен, что это было бы тогда. Я приложу фотографию в свой вопрос о том, что происходит на лицевой стороне. Если у вас есть идеи, дайте мне знать. Кроме того, когда я нажимаю на якорь AGAIN, часто заголовок отображается правильно. – CaitlinHavener

+0

Разум, отправляющий вызов AJAX? – tymeJV

ответ

-1

Вы можете обернуть элемент поиска элемента jQuery в тайм-аут без значения времени. Таймаут будет ждать завершения всех 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>'; 
    }}); 
}); 
Смежные вопросы