Немного проблем с доступом к динамически добавленным DIV сразу после того, как они были добавлены в DOM.
У меня есть примерно такая функция, которая принимает входные данные, получает данные JSON и создает div.
function addAttrib(attrib) {
$.getJSON("file.json", function(data) {
//Do all the stuff
var newDiv = $("<div class='word'>"+label+"</div>").insertAfter("#mapLabels");
var adjustedX = x - (newDiv.width()/2);
var adjustedY = y - (newDiv.height()/2);
newDiv.css("left",adjustedX);
newDiv.css("top",adjustedY);
newDiv.fadeIn("slow");
};
saveAttribs()
};
Затем у меня есть вторая функция, в основном я просто хочу создать массив всех DIV на странице класса "Word".(Поэтому я могу сохранить каждый новый div позже в отдельном файле JSON).
Итак, вторая функция, которая вызывается в конце вышеупомянутой, называется Save Attribs, и пока я простов режиме отладки, поэтому используйте console.log.
function saveAttribs() {
$.wordTracker.maps[$.wordTracker.currentMap] = [];
$.wordTracker.maps[$.wordTracker.currentMap].length = 0;
$(".word").each( function() {
//items.push($(this).text());
$.wordTracker.maps[$.wordTracker.currentMap].push($(this).text());
});
console.log($.wordTracker.maps[$.wordTracker.currentMap]);
}
Проблема в том, что при записи в консоль он всегда на 1 деление позади.Поэтому после добавления первого оно ничего не возвращает, второе возвращает первое, третье возвращает первое и второе и т. Д.
Что я могу сделать, чтобы убедиться, что он захватывает наиболее актуальный список дат выполненияDIV - или ждет, пока они полностью загрузятся?
На основе ответа приведена более полная версия первой функции.
function addAttrib(attrib) {
$.getJSON("file.json", function(data) {
//Cut out some vars for simplicity...
var exists = $('#'+attrib).length;
if (exists >= 1) {
$('#'+attrib).fadeOut("fast", function() { $(this).remove()} );
//$('.word').remove();
} else {
var newDiv = $("<div class='word' zone='"+data[attrib].ZoneName+"' map='"+$.wordTracker.currentMap+"' id='"+attrib+"'>"+label+"</div>").insertAfter("#mapLabels");
var adjustedX = x - (newDiv.width()/2);
var adjustedY = y - (newDiv.height()/2);
newDiv.css("left",adjustedX);
newDiv.css("top",adjustedY);
newDiv.fadeIn("slow");
}
focusOnInput();
saveAttribs();
});
}